简体   繁体   English

如何读取docker容器内的系统环境变量

[英]How to read system environment variables inside docker container

I am very new to docker.我对 docker 很陌生。 I have a requirement where docker container should read the system environment variable like AWS_INSTANCE_ID which is an instance-id in aws.我有一个要求,docker 容器应该读取系统环境变量,例如 AWS_INSTANCE_ID,它是 aws 中的实例 ID。 Normally on bootup, I used to add these environment variables using a shell script as follows通常在启动时,我曾经使用 shell 脚本添加这些环境变量,如下所示

    EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
export EC2_INSTANCE_ID=$EC2_INSTANCE_ID
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
export EC2_AVAIL_ZONE=$EC2_AVAIL_ZONE
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

Current Dockerfile当前 Dockerfile

    FROM node:boron
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json .
RUN npm install
# Bundle app source
COPY . .
CMD [ "npm", "start" ]

How can I read these system variables in the Docker container?如何在 Docker 容器中读取这些系统变量?

Create a shell script in your project在你的项目中创建一个 shell 脚本

env.sh环境文件

EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
export EC2_INSTANCE_ID=$EC2_INSTANCE_ID
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
export EC2_AVAIL_ZONE=$EC2_AVAIL_ZONE
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"

Modify your dockerfile to below将您的 dockerfile 修改为以下

FROM node:boron
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json .
RUN npm install
# Bundle app source
COPY . .
COPY env.sh /etc/profile.d/awsenv.sh
ENTRYPOINT ["/bin/sh", "-lc"]
CMD ["env && exec npm start"]

Now when the image starts it will automatically have the environment variables现在,当图像启动时,它会自动拥有环境变量

环境变量可以在运行时使用docker run环境选项或通过docker run--env-file 选项添加到容器中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AWS XRay SDK 无法读取 docker 容器内的环境变量 - AWS XRay SDK fails to read environment variables within a docker container 在docker容器中获取弹性beanstalk环境变量 - Get elastic beanstalk environment variables in docker container 使用 gradle 任务构建映像时,无法在 docker 容器内设置环境变量 - Not able to set environment variables inside a docker container when building image using gradle task 如何更改 AWS Fargate 上的 Grafana docker 容器环境变量以使用 mysql 数据库 - How do I change Grafana docker container environment variables on AWS Fargate to use a mysql database AWS上的Docker-环境变量未从主机继承到容器 - Docker on AWS - Environment Variables not inheriting from host to container docker容器中的'aws configure'不会使用环境变量或配置文件 - 'aws configure' in docker container will not use environment variables or config files 如何从本地文件读取值到Docker-compose环境变量? - How to read values from local file into Docker-compose environment variables? 如何在Boto中使用系统环境变量 - how to use system environment variables in boto 有没有办法从Serverless内部的CodeCommit读取环境变量? - Is there a way to read environment variables from CodeCommit inside Serverless? 如何在 Docker 容器内运行命令 - How to run command inside Docker container
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM