我正在构建Docker映像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
,但看不到新导出的变量,如{{ 1}}。
我已经找到并试图通过调用lsEnv
解决此问题:Python: can't access newly defined environment variables,但是我找不到该文件。
我尝试过
source ~/.bashrc
但是这些都不存在(也不知道这是否能解决我的问题),并且以以下错误消息~/.bashrc
/etc/bash.bashrc
/root/.bashrc
更多可重复的示例:
Dockerfile
/app/deploy.sh: source: line 16: can't open '/root/.bashrc'
deploy.sh
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"]
terraform / run-terraform.sh
#!/bin/bash -x
cd /app/terraform
./run-terraform.sh
cd ..
python /app/deploy.py
python脚本
...
export lsEnv="NotThere"
...
打印内容将显示#!/usr/bin/env python
import os
print(os.environ)
或lsRegion
,但不会显示lsCluster
答案 0 :(得分:1)
在deploy.sh
内,如果您想影响运行run-terraform.sh
的流程的环境,而不是为运行{{1 }}。
deploy.py
(您也可以使用run-terraform.sh
; #!/bin/bash -x
cd /app/terraform
source ./run-terraform.sh
cd ..
python /app/deploy.py
是POSIX . ./run-terraform.sh
命令的更易读的source
同义词,但是如果您是bash
,则必须使用其他不支持.
的POSIX兼容外壳。)
答案 1 :(得分:0)
我通过在terraform/run-terraform.sh
中为python脚本中需要的每个环境变量调用此命令来解决此问题:
echo "export lsTargetGroup=$lsTargetGroup" >> ~/.bashrc
然后在deploy.sh
中,我只需在调用python脚本之前添加source ~/.bashrc