如何通过 env 文件传递 docker 运行 中的环境变量?
How to pass through environment variables in docker run through an env file?
鉴于此 Dockerfile:
FROM alpine:3.7
ENV LAST_UPDATED=2018-02-22
ARG XDG_CACHE_HOME=/tmp/cache/
RUN apk update && \
apk add libxslt && \
apk add sed && \
apk add py-pip && \
apk add mariadb-client && \
apk add bash bash-doc bash-completion && \
pip install httpie && \
rm -rf /var/cache/apk/*
WORKDIR /usr/deleter/
COPY delete.sh ./
ENTRYPOINT ["/usr/deleter/delete.sh"]
我希望能够通过具有 key=value
格式的 .env
文件传递多个变量。
$ cat stage.env
MYSQL_DATABASE=database
MYSQL_HOST=127.0.0.1:3306
MYSQL_PASSWORD=password
MYSQL_PORT=3306
MYSQL_USER=a_user
我的delete.sh
看起来像这样:
#!/bin/bash
set -e
set -o pipefail
echo "hello world"
echo ${MYSQL_DATABASE} ${MYSQL_HOST} ${MYSQL_PASSWORD} ${MYSQL_PORT} ${MYSQL_USER}
echo "ALL VARIABLES"
env
我希望看到环境变量,但它们都是空的。 --env-file
选项似乎不起作用。脚本的输出是:
hello world
ALL VARIABLES
HOSTNAME=f52c5c2aa22b
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/usr/deleter
LAST_UPDATED=2018-02-22
SHLVL=1
HOME=/root
_=/usr/bin/env
我通过以下方式创建并 运行 docker 容器:
docker build -t deleter:local
docker run deleter:local --env-file stage.env
我尝试了 --env-file stage.env
、--env-file=stage.env
、--env-file ./stage.env
,但我没有看到包含任何内容,也没有看到任何抛出的错误。我也用绝对路径试了一下
stage.env
与我的 Dockerfile 处于同一级别。
env 文件有效,我可以在我的本地机器上获取它并访问那里的变量。
我的错误在哪里?
请记住,docker run
参数顺序是强制性的:
$ docker help run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
环境设置属于选项:
-e, --env list Set environment variables
--env-file list Read in a file of environment
因此:
docker run --env-file stage.env deleter:local
将按预期导入环境变量。
鉴于此 Dockerfile:
FROM alpine:3.7
ENV LAST_UPDATED=2018-02-22
ARG XDG_CACHE_HOME=/tmp/cache/
RUN apk update && \
apk add libxslt && \
apk add sed && \
apk add py-pip && \
apk add mariadb-client && \
apk add bash bash-doc bash-completion && \
pip install httpie && \
rm -rf /var/cache/apk/*
WORKDIR /usr/deleter/
COPY delete.sh ./
ENTRYPOINT ["/usr/deleter/delete.sh"]
我希望能够通过具有 key=value
格式的 .env
文件传递多个变量。
$ cat stage.env
MYSQL_DATABASE=database
MYSQL_HOST=127.0.0.1:3306
MYSQL_PASSWORD=password
MYSQL_PORT=3306
MYSQL_USER=a_user
我的delete.sh
看起来像这样:
#!/bin/bash
set -e
set -o pipefail
echo "hello world"
echo ${MYSQL_DATABASE} ${MYSQL_HOST} ${MYSQL_PASSWORD} ${MYSQL_PORT} ${MYSQL_USER}
echo "ALL VARIABLES"
env
我希望看到环境变量,但它们都是空的。 --env-file
选项似乎不起作用。脚本的输出是:
hello world
ALL VARIABLES
HOSTNAME=f52c5c2aa22b
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/usr/deleter
LAST_UPDATED=2018-02-22
SHLVL=1
HOME=/root
_=/usr/bin/env
我通过以下方式创建并 运行 docker 容器:
docker build -t deleter:local
docker run deleter:local --env-file stage.env
我尝试了 --env-file stage.env
、--env-file=stage.env
、--env-file ./stage.env
,但我没有看到包含任何内容,也没有看到任何抛出的错误。我也用绝对路径试了一下
stage.env
与我的 Dockerfile 处于同一级别。
env 文件有效,我可以在我的本地机器上获取它并访问那里的变量。
我的错误在哪里?
请记住,docker run
参数顺序是强制性的:
$ docker help run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
环境设置属于选项:
-e, --env list Set environment variables
--env-file list Read in a file of environment
因此:
docker run --env-file stage.env deleter:local
将按预期导入环境变量。