在 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} "

我只是像这样构建 Dockerfiledocker 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