首页 > 解决方案 > Docker compose 从 .env 文件中获取环境变量并传递给 docker build

问题描述

我希望能够为我的 docker 容器配置 env 变量,并在构建过程中使用 .env 文件

我目前有以下.env文件:

SSH_PRIVATE_KEY=TEST
APP_PORT=8040

我的码头工人撰写

version: '3'
services:
  companies:
    image: companies8
    environment:
      - SSH_PRIVATE_KEY=${SSH_PRIVATE_KEY}
    ports:
      - ${APP_PORT}:${APP_PORT}
    env_file: .env
    build:
      context: .
      args:
        - SSH_PRIVATE_KEY=${SSH_PRIVATE_KEY}

我的Dockerfile

FROM python:3.7

# set a directory for the app

COPY . .

#Accept input argument from docker-compose.yml
ARG SSH_PRIVATE_KEY=abcdef
ENV SSH_PRIVATE_KEY $SSH_PRIVATE_KEY
RUN echo $SSH_PRIVATE_KEY

# Pass the content of the private key into the container
RUN mkdir -p /root/.ssh
RUN chmod 400 /root/.ssh
RUN echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa
RUN echo "$SSH_PUBLIC_KEY" > /root/.ssh/id_rsa.pub
RUN chmod 400 /root/.ssh/id_rsa
RUN chmod 400 /root/.ssh/id_rsa.pub
RUN eval $(ssh-agent -s) && ssh-add /root/.ssh/id_rsa && ssh-keyscan bitbucket.org > /root/.ssh/known_hosts
RUN ssh -T git@bitbucket.org

#Install the packages
RUN pip install -r v1/requirements.txt

# Tell the port number the container should expose
EXPOSE 8040

# run the command
CMD ["python", "v1/__main__.py"]

我在我的窗口上设置了相同的 SSH_PRIVATE_KEY 环境变量,值为“test1”,构建日志给了我结果“test1”

ENV SSH_PRIVATE_KEY $SSH_PRIVATE_KEY
RUN echo $SSH_PRIVATE_KEY

不是 .env 文件中的值。

我需要这个,因为我的 requirements.txt 中列出的一些库位于内部存储库中,我需要 ssh 来访问它们,因此需要 ssh 私钥。可能有另一种正确的方法来使用它,但它是我想要实现的一般场景 - 将 env 变量值从 .env 文件传递​​到我的 docker build

标签: pythondockerdocker-composeenvironment-variablescontainers

解决方案


和之间有一定的重叠ENVARG如下图所示:

在此处输入图像描述

由于您已经在操作系统中导出了变量,因此它的值将出现在ENV指令的图像中。

但是,如果您并不真的需要图像中的变量,而只需要在构建步骤中(据我从docker-compose文件中看到的),那么ARG指令就足够了。


推荐阅读