Docker составить, получить переменные env из файла .env и перейти к docker build - PullRequest
0 голосов
/ 25 февраля 2020

Я хотел бы иметь возможность настроить переменные env для моих docker контейнеров и использовать их в процессе сборки с файлом .env

В настоящее время у меня есть следующий файл .env:

SSH_PRIVATE_KEY=TEST
APP_PORT=8040

my docker -композит :

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}

my 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 установлена ​​на моем windows со значением "test1" и журнал сборки дает мне результат 'test1' из

ENV SSH_PRIVATE_KEY $SSH_PRIVATE_KEY
RUN echo $SSH_PRIVATE_KEY

, а не значение, которое находится в файле .env.

Мне это нужно, потому что некоторые из библиотек, перечисленных в моем файле require.txt, находятся во внутреннем репозитории, и мне нужен s sh для доступа к ним, поэтому закрытый ключ s sh. Возможно, есть и другой правильный способ использовать это, но это общий сценарий, которого я хочу достичь - передать значения переменных env из файла .env в мой docker build

1 Ответ

1 голос
/ 25 февраля 2020

Существует определенное перекрытие между ENV и ARG, как показано на рисунке ниже:

enter image description here

Поскольку у вас уже есть переменная экспортируется в операционную систему, его значение будет присутствовать в образе из инструкции ENV.

Но если вам на самом деле не нужна переменная в образе и только на этапе сборки (насколько я вижу из файла docker-compose), тогда достаточно инструкции ARG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...