docker - 如何从 Dockerfile shell 脚本中的 .env 文件获取环境变量值?

标签 docker environment-variables docker-compose

如何在 shell 脚本中访问 .env 文件中定义的环境变量?

.env 文件

USERNAME=user
PASSWORD=pass

Dockerfile

....

COPY ./compose/django/celery/worker/start_celery_flower.sh /start_celery_flower.sh
RUN sed -i 's/\r//' /start_celery_flower.sh
RUN chmod +x /start_celery_flower.sh

....

我尝试在 shell 脚本中使用 $USERNAME,但这不起作用。我能够在容器内运行的应用程序中访问这些变量。

最佳答案

docker build $(cat .env | xargs -n1 echo '--build-arg' | tr '\n' ' ') .

并在您的Dockerfile中添加

ARG USERNAME
ARG PASSWORD

基本上,您需要使用 --build-arg 来传递构建参数。我发布的命令将有助于从文件中获取多个命令。

编辑-1

要在 docker-compose 中使用,如下所示

version: '3'
services:
  web:
    build:
      context: .
      args:
        - USERNAME=$USERNAME
        - PASSWORD=$PASSWORD

现在您需要在发送到 docker-compose 之前导出变量

set -a
source .env
set +a
docker-compose up --build -d

关于docker - 如何从 Dockerfile shell 脚本中的 .env 文件获取环境变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079783/

相关文章:

安卓linux环境变量

java - Eclipse:将环境变量用于外部 jar 位置

php - Docker Compose Wordpress示例

python - Airflow 2/docker-compose : how to install Python dependencies for DAGs?

docker - Ubuntu systemd[1] : docker. 服务 : Job docker. 服务/启动失败,结果为 ‘dependency’

amazon-web-services - 如何明确提及外部卷名称?

docker - 使用 nginx 反向代理的 Go 服务器

bash - Cron 作业未获取 .bashrc 中设置的环境变量

docker - 容器内文件系统的更改未反射(reflect)在 docker 卷中的主机上

java - StreamSets处理器找不到Redis库