来自 docker-compose .env 文件的多个 Docker 构建参数

Posted

技术标签:

【中文标题】来自 docker-compose .env 文件的多个 Docker 构建参数【英文标题】:Multiple Docker build args from docker-compose .env file 【发布时间】:2018-05-07 03:46:54 【问题描述】:

我在使用 docker-compose 的 .env 文件时遇到了一个奇怪的问题。我可以在我的 .env 文件中使用第一个变量 key=pair,但只能使用第一个变量。这是我的文件夹结构

|- root
|  |- .env
|  |- docker-compose.yaml
|  |- service-1
|     |- Dockerfile

.env:

GIT_TOKEN=c3e13c4e33935
DB_PWD=mypassword

docker-compose.yaml:

version: '3'
web-server:
      container_name: service-1
      image: sdc/service-1:0.1
      build:
        context: ./service-1
        args:
          - GIT_TOKEN=$GIT_TOKEN
          - DB_PWD=$DB_PWD

service-1/Dockerfile:

FROM node:boron
ARG GIT_TOKEN
ARG DB_PWD
RUN git clone https://$GIT_TOKEN@github.com/chrxn/sdc.git
RUN echo "database_password:" $DB_PWD  > crews.txt

问题在于 GIT_TOKEN 变量工作正常,但 DB_PWD 变量却不行。即使将 GIT_TOKEN 变量放在 echo 行中,令牌也会保存到文件中(所以我知道这不是 echo/bash 插值问题)非常感谢任何帮助。我已经阅读了所有与 Docker 环境变量相关的内容。

注意:我修改了一些内容。我的数据库密码不是 mypassword,也不是真正的 git repo

参考文献:

.env file ARG Similar example but setting container environment variables False issue raised because .env and env_file is so confusing combine ARG and ENV

我真的很想坚持使用 Docker 构建参数而不是环境变量,这样这些值就不会存储在容器的环境变量中。

【问题讨论】:

【参考方案1】:

Facepalm ?‍♀️ - 效果很好。我将- DB_PWD=$DB_PWD 参数放在我的docker-compose.yaml 文件中的错误服务下。我将把它留在这里作为如何使用带有 docker build 参数的.env 文件的参考——并提醒我自己我是个白痴。我很尴尬--100 SOF 声望

【讨论】:

我们如何使用文件中的参数? 谢谢 我在args 下也有错字。但是这篇文章让我确信我在正确的轨道上并更正了我的配置。特别是做- VAR=$VAR 而不是- VAR=$VAR。真正的问题仍然是我打错了- REPOSITORY_URL=$REPOSITYORY_URL。发布您做错的事情也可以帮助他人!

以上是关于来自 docker-compose .env 文件的多个 Docker 构建参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自其他目录的 docker-compose 环境变量

docker-compose 未定义的 process.env

如何从.env文件获取环境变量到docker-compose.yml?

Docker-compose env文件不起作用

在 docker-compose 的 .env 文件中使用多行值

docker-compose .env 与 direnv .envrc