如何搬运工运行通过ENV文件通过环境变量?

问题描述 投票:3回答:1

鉴于这种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"]

我希望能够通过与.env格式的文件key=value传递多个变量。

$ 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变量,但它们都是空的。该--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 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 environment-variables alpine
1个回答
5
投票

请记住,在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 run deleter:local

如预期将导入环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.