【发布时间】:2018-08-16 15:52:49
【问题描述】:
我正在使用 Packer 配置 docker Centos 映像,并使用 bash 脚本而不是 Dockerfile 来配置映像(这似乎是 Packer 的方式)。我似乎无法弄清楚如何更新 PATH 变量,以便我的自定义二进制文件可以像这样执行:
docker run -i -t <container> my_binary
我曾尝试将.sh 文件放入/etc/profile.d/ 文件夹并直接写入/etc/environment,但似乎都没有生效。
我怀疑这与 Docker 在一次性容器中执行命令时使用的 shell 有关。我以为是 Bourne Shell,但如前所述,/etc/profile.d/ 和 /etc/environment 方法都不起作用。
更新:
据我所知,由于@tgogos 回答中解释的原因,无法更改正在运行的容器中的环境变量。但是我不认为这对我来说是个问题,因为在 Packer 完成配置映像之后,它会提交它并上传到 Docker Hub。更准确的例子如下:
$ docker run -itd --name test centos:6
$ docker exec -it test /bin/bash
[root@006a9c3195b6 /]# echo 'echo SUCCESS' > /root/test.sh
[root@006a9c3195b6 /]# chmod +x /root/test.sh
[root@006a9c3195b6 /]# echo 'export PATH=/root:$PATH' > /etc/profile.d/my_settings.sh
[root@006a9c3195b6 /]# echo 'PATH=/root:$PATH' > /etc/environment
[root@006a9c3195b6 /]# exit
$ docker commit test test-image:1
$ docker exec -it test-image:1 test.sh
期待看到SUCCESS 打印但得到
OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"test.sh\": executable file not found in $PATH": unknown
更新 2
我已经更新了 ~/.bashrc 中的 PATH,这让我可以执行以下操作:
$ docker run -it test-image:1 /bin/bash
[root@8f821c7b9b82 /]# test.sh
SUCCESS
但是运行docker run -it test-image:1 test.sh 仍然会导致
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: ...
我可以确认我的图像 CMD 设置为“/bin/bash”。那么有人能解释一下为什么运行docker run -it test-image:1 test.sh 不来源~/.bashrc 吗?
【问题讨论】:
-
你能提供一个mcve吗?
-
@tgogos 请查看带有 mcve 示例的更新问题。
标签: docker centos environment-variables packer