Python脚本无法访问某些环境变量

时间:2018-11-13 14:32:01

标签: python linux bash docker containers

我正在构建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

2 个答案:

答案 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