在 docker 入口点脚本中访问环境变量
Access env variables inside docker entrypoint script
我想在我的 docker run
命令中传递环境变量并在我的入口点 shell 脚本中访问它们。
这是我的超级简单Dockerfile
用于测试目的:
FROM ubuntu:20.04
WORKDIR /
ADD entrypoint.sh .
RUN chmod 755 entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
这是 entrypoint.sh
:
#!/bin/sh
printf "env var TEST = ${TEST} "
我只是像这样构建 Dockerfile
:docker build -t test:1.0 .
然后 运行 像这样:docker run -i test:1.0 -e TEST='Hello world'
很遗憾,输出不包含环境变量。
像这样的东西会起作用:
entrypoint.sh
#!/bin/sh
echo $MYVAR
Dockerfile
FROM alpine:3.15.4
WORKDIR /home/app
COPY ./entrypoint.sh .
ENV MYVAR=""
ENTRYPOINT ["/bin/sh", "/home/app/entrypoint.sh"]
然后您可以构建 & 运行 容器,同时设置环境变量:
$ docker build -t test . && docker run -e MYVAR="hello world" test
郑重声明:预定义变量不是解决方案。
参数的顺序很重要,就像David Maze所说的那样。
# incorrect
docker run -i test:1.0 -e TEST='Hello world'
# correct
docker run -i -e TEST='Hello world' test:1.0
我想在我的 docker run
命令中传递环境变量并在我的入口点 shell 脚本中访问它们。
这是我的超级简单Dockerfile
用于测试目的:
FROM ubuntu:20.04
WORKDIR /
ADD entrypoint.sh .
RUN chmod 755 entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
这是 entrypoint.sh
:
#!/bin/sh
printf "env var TEST = ${TEST} "
我只是像这样构建 Dockerfile
:docker build -t test:1.0 .
然后 运行 像这样:docker run -i test:1.0 -e TEST='Hello world'
很遗憾,输出不包含环境变量。
像这样的东西会起作用:
entrypoint.sh
#!/bin/sh
echo $MYVAR
Dockerfile
FROM alpine:3.15.4
WORKDIR /home/app
COPY ./entrypoint.sh .
ENV MYVAR=""
ENTRYPOINT ["/bin/sh", "/home/app/entrypoint.sh"]
然后您可以构建 & 运行 容器,同时设置环境变量:
$ docker build -t test . && docker run -e MYVAR="hello world" test
郑重声明:预定义变量不是解决方案。
参数的顺序很重要,就像David Maze所说的那样。
# incorrect
docker run -i test:1.0 -e TEST='Hello world'
# correct
docker run -i -e TEST='Hello world' test:1.0