如何Docker执行专门在Ubuntu Docker Image/Container上的Docker容器内置的外壳



谢谢您阅读我的帖子。

问题:

# docker ps
CONTAINER ID        IMAGE                  COMMAND             
35c8b832403a        ubuntu1604:1   "sh -c /bin/sh"    
# docker exec -i -t 35c8b832403a type type
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:262: starting container process caused "exec: "type": executable file not found in $PATH"
# Dockerfile
FROM ubuntu:16.04
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN apt-get update && apt-get -y upgrade
ENTRYPOINT ["sh", "-c"]
CMD ["/bin/bash"]

描述:

我的目的是以下面的方式编写Docker Exec的方式获得" type"外壳

的执行方式。

Docker Exec -I -T 35C8B832403A类型类型(失败)

Docker Exec -I -T 35C8B832403A SH -C"类型"(传递)

我有谷歌搜索,在容器中进行一些修改(Change/etc/profile,/etc/Environment,bashrc),但失败了。

从Docker文档本身中,它有:

命令将在容器的默认目录中运行。它 基础图像具有Workdir指定的自定义目录 dockerfile中的指示将被使用。

命令应该是可执行的,链接或引用的命令将 不行。示例:docker exec -ti my_container" eCho a&& echo b"将行不通,但是Docker Exec -Ti my_container sh -c" echo a&& Echo B" Will。

,但似乎可以从docker fedora (dockerfile:fardora:25)从docker fedora 获得正确的输出

# docker ps
CONTAINER ID        IMAGE                  COMMAND             
2a17b2338518        fedora25:1   "sh -c /bin/sh" 
# docker exec -i -t 2a17b2338518 type type
type is a shell builtin

问题:

有什么办法可以在Ubuntu Docker上启用这一点?图像/容器调整?VagrantFile配置?请帮助。

其他:

使用Docker Run,由于Dockerfile中的"入口点",我能够获得正确的输出。但是,图像需要保存而不是导出

以防万一能够按照您的期望执行类型,它将需要成为路径的一部分。正如您所说,成为壳不会有帮助,因为您不想执行/bin/bash -c 'type type'

如果要将type作为内置壳命令执行,这意味着您需要执行shell /bin/bash/bin/sh,然后在其上执行'type type',使其成为/bin/bash -c 'type type'

毕竟,正如@henry所说,Docker Exec是将执行的完整命令,并且上面没有CMDENTRYPOINT的位置。

cmd,如果您运行docker exec,则毫无意义。其余参数被视为命令并在已经存在的容器中执行。

也许您想使用docker run

最新更新