Я хотел бы иметь возможность настроить переменные 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