docker image in docker compose 如何指定环境变量
How to specify environment variables with docker image in docker compose
我有一个工作流程,我在其中构建一个特定的图像,然后(在推送到 ECR 存储库然后将其拉到 AWS 服务器之后)基本上 运行 它带有 docker-撰写文件。我的 docker 撰写文件如下所示:
version: "3.8"
services:
web:
image: <my-aws-server>/my-repo:latest
command: gunicorn vms.wsgi:application --bind 0.0.0.0:8000
expose:
- 8000
nginx:
build: ../nginx
ports:
- 1337:80
depends_on:
- web
我的 docker 文件是这样的:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000"]
我希望能够在我的 docker-compose 中做这样的事情:
version: "3.8"
services:
web:
image: <my-aws-server>/my-repo:latest
env: SECRET_PASSWORD #note change here
command: gunicorn vms.wsgi:application --bind 0.0.0.0:8000
expose:
- 8000
nginx:
build: ../nginx
ports:
- 1337:80
depends_on:
- web
我在其中指定环境变量,这些变量存储在服务器上的一个文件中。有什么办法可以做到这一点?如果图像文件只是二进制文件,也许是不可能的。
或者当我在 GitHub 操作中 构建 图像时,我是否必须从一开始就实际传递环境变量,此处:
steps:
- uses: actions/checkout@v2
name: Check out code
- uses: mr-smithers-excellent/docker-build-push@v5
name: Build & Push Docker image
with:
image: my-image
registry: ${{ secrets.AWS_ECR_REGISTRY }}
tags: latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
编辑:在我的 GitHub 操作中,我尝试了这样的操作:
- name: Start new container
run: ssh staging 'cd my_dir; sudo docker-compose --env-file ~/code/secrets/.env -f docker-compose.prod.yml up -d'
但这似乎没有用。我在那里做错了什么吗?还是应该在预构建映像中使用该文件中的任何环境变量的情况下按预期工作? (我不会再次构建它,只是启动图像,从 docker 撰写文件中可以明显看出)。
有env_file
指令。这将在运行时将变量从指定文件传递到容器。
参考:
我有一个工作流程,我在其中构建一个特定的图像,然后(在推送到 ECR 存储库然后将其拉到 AWS 服务器之后)基本上 运行 它带有 docker-撰写文件。我的 docker 撰写文件如下所示:
version: "3.8"
services:
web:
image: <my-aws-server>/my-repo:latest
command: gunicorn vms.wsgi:application --bind 0.0.0.0:8000
expose:
- 8000
nginx:
build: ../nginx
ports:
- 1337:80
depends_on:
- web
我的 docker 文件是这样的:
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000"]
我希望能够在我的 docker-compose 中做这样的事情:
version: "3.8"
services:
web:
image: <my-aws-server>/my-repo:latest
env: SECRET_PASSWORD #note change here
command: gunicorn vms.wsgi:application --bind 0.0.0.0:8000
expose:
- 8000
nginx:
build: ../nginx
ports:
- 1337:80
depends_on:
- web
我在其中指定环境变量,这些变量存储在服务器上的一个文件中。有什么办法可以做到这一点?如果图像文件只是二进制文件,也许是不可能的。
或者当我在 GitHub 操作中 构建 图像时,我是否必须从一开始就实际传递环境变量,此处:
steps:
- uses: actions/checkout@v2
name: Check out code
- uses: mr-smithers-excellent/docker-build-push@v5
name: Build & Push Docker image
with:
image: my-image
registry: ${{ secrets.AWS_ECR_REGISTRY }}
tags: latest
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
编辑:在我的 GitHub 操作中,我尝试了这样的操作:
- name: Start new container
run: ssh staging 'cd my_dir; sudo docker-compose --env-file ~/code/secrets/.env -f docker-compose.prod.yml up -d'
但这似乎没有用。我在那里做错了什么吗?还是应该在预构建映像中使用该文件中的任何环境变量的情况下按预期工作? (我不会再次构建它,只是启动图像,从 docker 撰写文件中可以明显看出)。
有env_file
指令。这将在运行时将变量从指定文件传递到容器。
参考: