Я создаю Docker Image FROM node:8.9.3-alpine
(который является Debian), а затем запускаю его как обычно и передаю параметры, подобные этому:
docker run -dt \
-e lsRegion=${bamboo_lsRegion} \
-e lsCluster=${bamboo_lsCluster} \
Затем внутри этого контейнера я экспортирую некоторые переменные, и когда я их выводю, я вижу правильное значение
export lsEnv=${lsEnv:-'dev'}
Позже в скриптах я запускаю скрипт на python, и когда я запускаю print(os.environ)
, я вижу все переменные из docker run
, такие как lsRegion
, но я не вижу недавно экспортированную, такую как lsEnv
.
Я уже нашел и попытался решить с помощью этого: Python: не могу получить доступ к вновь определенным переменным среды , вызвав source ~/.bashrc
, но я не могу найти этот файл.
Я пытался
~/.bashrc
/etc/bash.bashrc
/root/.bashrc
Но ни один из них не существует (также не знает, решит ли это мою проблему) и заканчивается этим сообщением об ошибке /app/deploy.sh: source: line 16: can't open '/root/.bashrc'
Более воспроизводимый пример:
Dockerfile
FROM node:8.9.3-alpine
RUN apk add --no-cache \
python \
py-pip \
ca-certificates \
openssl \
groff \
less \
bash \
curl \
jq \
git \
zip \
build-base \
&& pip install --no-cache-dir --upgrade pip awscli \
&& aws configure set preview.cloudfront true
ENV TERRAFORM_VERSION 0.11.10
RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip && \
unzip terraform.zip -d /usr/local/bin && \
rm -f terraform.zip
RUN apk -v --update add python py-pip
RUN pip install --upgrade awscli
RUN pip install --upgrade boto3
COPY ./build.variables /app/build.variables
COPY ./aws/taskdef/template.json /app/template.json
COPY ./deploy.sh /app/deploy.sh
COPY ./deploy.py /app/deploy.py
COPY ./terraform /app/terraform
CMD ["sh", "/app/deploy.sh"]
deploy.sh
#!/bin/bash -x
cd /app/terraform
./run-terraform.sh
cd ..
python /app/deploy.py
Terraform / run-terraform.sh
...
export lsEnv="NotThere"
...
скрипт Python
#!/usr/bin/env python
import os
print(os.environ)
На печати будет отображаться lsRegion
или lsCluster
, но не будет отображаться lsEnv