如何在Ubuntu docker镜像/容器上专门执行docker容器内置的shell

时间:2017-09-28 03:10:40

标签: linux ubuntu docker dockerfile fedora

感谢您阅读我的帖子。

问题:

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

说明

我的目标是让内置的“类型”shell以编写docker exec的方式执行,如下所示

docker exec -i -t 35c8b832403a类型类型(FAILED)

不会

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

我在google上搜索,在容器中进行一些修改(更改/ etc / profile,/ etc / environment,bashrc)但是失败了。

从docker文档本身,它具有以下状态:

  

COMMAND将在容器的默认目录中运行。它   底层映像具有使用WORKDIR指定的自定义目录   在其Dockerfile中的指令,将改为使用它。

     

COMMAND应该是可执行文件,链接或引用命令   不行。示例:docker exec -ti my_container“echo a&& echo   b“将无法正常工作,但是对接器执行者-ti my_container sh -c”回应a&&   echo b“will。

但是当我能够获得正确的输出来自DOCKER FEDORA (Dockerfile:FROM 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上启用它?图像/容器调整? Vagrantfile配置?请帮忙。

其他:

使用docker run,我能够获得正确的输出,因为Dockerfile中的“ENTRYPOINT”。但是图片需要保存而不是导出

2 个答案:

答案 0 :(得分:0)

如果你运行docker exec

CMD和ENTRYPOINT毫无意义。其余参数作为命令执行,并在现有容器中执行。

也许您想使用docker run

答案 1 :(得分:0)

以防万一,为了能够按预期执行类型,它需要成为路径的一部分。作为一个内置的shell是不会有帮助的,因为如你所说,你不想执行/bin/bash -c 'type type'

如果您希望将type作为内置shell命令执行,则表示您需要执行shell /bin/bash/bin/sh,然后执行' type type&#39 ;在它上面,/bin/bash -c 'type type'

毕竟,正如@Henry所说,docker exec是一个完整的命令,将会执行CMDENTRYPOINT