感谢您阅读我的帖子。
问题:
# 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”。但是图片需要保存而不是导出。
答案 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是一个完整的命令,将会执行CMD
或ENTRYPOINT
。