Dockerfile使用脚本设置环境变量

时间:2020-10-14 10:12:39

标签: docker dockerfile

我正在尝试通过脚本设置一些环境变量。 (就像这里的解释: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" ]添加结尾,但没有任何反应...

1 个答案:

答案 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的目标来徘徊。