我正在尝试通过脚本设置一些环境变量。 (就像这里的解释:https://stackoverflow.com/a/55922307)
Dockerfile
FROM container1:latest
WORKDIR /etc/test
RUN ["/bin/bash", "-c", ". env/environment.sh && command2 && command3"]
COPY entry.sh .
ENTRYPOINT ["/etc/test/entry.sh"]
entry.sh
#!/bin/bash
. /etc/test/env/environment.sh
exec "$@"
然后构建图像:
docker build -t docker-test .
然后运行它:
docker run -it -d --name env-test docker-test:latest
但是容器会在几秒钟后停止:
COMMAND CREATED STATUS
"/etc/test/entry.sh" 7 seconds ago Exited (0) 1 second ago
为什么容器不再运行?我想和docker exec一起讨论。 我可以以某种方式测试环境变量是否设置正确吗?
我试图添加CMD [ "sh", "-c", "echo $PATH" ]
添加结尾,但没有任何反应...
答案 0 :(得分:2)
您的容器退出,因为您没有提供任何要运行的命令。您已经将ENTRYPOINT
设置为/etc/test/entry.sh
,并且脚本试图执行您提供的任何参数(通过exec "$@"
),但是您正在运行如下图像:
docker run -it -d --name env-test docker-test:latest
由于您未提供命令,因此容器在启动后立即退出。添加CMD [ "sh", "-c", "echo $PATH" ]
不会改变这种行为,因为 that 命令也会立即退出。
目前尚不清楚您希望这个容器做什么。
如果您只是想让容器闲逛一会儿,可以运行sleep
命令:
docker run -it -d --name env-test docker-test:latest sleep 1800
或者您可以将其作为默认命令放入Dockerfile
中>
FROM container1:latest
WORKDIR /etc/test
RUN ["/bin/bash", "-c", ". env/environment.sh && command2 && command3"]
COPY entry.sh .
ENTRYPOINT ["/etc/test/entry.sh"]
CMD ["sleep", "1800"]
但是这些例子都没有道理。您通常会让容器运行某种长期存在的过程,例如Web服务器,数据库等,而不是仅仅作为docker exec
的目标来徘徊。