如何在Docker镜像/容器上执行docker exec docker容器的shell内build

感谢您阅读我的文章。

问题:

# 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"] 

描述:

我的目标是得到“types”壳内置执行写入docker执行如下

docker exec -i -t 35c8b832403a type type(FAILED)

docker exec -i -t 35c8b832403a sh -c“type type”(PASSED)

我search一下,在容器中做一些修改(更改/ etc / profile,/ etc / environment,bashrc),但是失败了。

从docker文件本身,它已经说明:

COMMAND将运行在容器的默认目录中。 它底层的图像有一个自定义的目录在其Dockerfile的WORKDIR指令中指定,这将被用来代替。

COMMAND应该是一个可执行文件,链接或引用的命令将不起作用。 例如:docker exec -ti my_container“echo a && echo b”将不起作用,但是docker exec -ti my_container sh -c“echo a && echo b”will。

但似乎是可能的,当我能够得到正确的输出从DOCKER FEDORA (Dockerfile:从Fedora:25)

 # 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? 图像/容器调整? stream浪文件configuration? 请帮忙。

其他:

使用docker运行,我能够得到正确的输出,因为Dockerfile中的“入口点”。 但是图像需要保存而不是导出

CMD和ENTRYPOINT是没有意义的,如果你运行docker docker exec 。 剩下的参数作为命令并在现有的容器中执行。

也许你想使用docker run

以防万一,为了能够执行你想要的types,它需要成为path的一部分。 作为一个shell内build不会帮助,因为如你所说,你不想执行/bin/bash -c 'type type'

如果你想把type作为内buildshell命令执行,这意味着你需要执行一个shell /bin/bash/bin/sh ,然后对其执行“type type”,使其成为/bin/bash -c 'type type'

毕竟,正如@Henry所说的,docker执行是一个完整的命令,将被执行,并且没有CMDENTRYPOINT点的位置。