Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose Docker如何在构建期间在Dockerfile中使用env_文件变量_Docker Compose_Dockerfile - Fatal编程技术网

Docker compose Docker如何在构建期间在Dockerfile中使用env_文件变量

Docker compose Docker如何在构建期间在Dockerfile中使用env_文件变量,docker-compose,dockerfile,Docker Compose,Dockerfile,我想在我的Dockerfile中使用env_文件中的STAGE变量。大多数帖子建议只使用-e和docker compose up命令,但我希望通过env_文件实现这一点 我尝试添加args,但不起作用 环境文件 STAGE=DEV FROM python:3.6 ENV PYTHONUNBUFFERED 1 (...) RUN pip install -r project/requirements/$STAGE.txt docker compose.yml version: '2' ser

我想在我的
Dockerfile
中使用
env_文件中的
STAGE
变量。大多数帖子建议只使用
-e
docker compose up
命令,但我希望通过
env_文件实现这一点

我尝试添加
args
,但不起作用

环境文件

STAGE=DEV
FROM python:3.6
ENV PYTHONUNBUFFERED 1
(...)
RUN pip install -r project/requirements/$STAGE.txt
docker compose.yml

version: '2'

services:
  web:
    build: .
    env_file:
      - /etc/web.env
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./backend:/code
    ports:
      - "8000:8000"
Dockerfile

STAGE=DEV
FROM python:3.6
ENV PYTHONUNBUFFERED 1
(...)
RUN pip install -r project/requirements/$STAGE.txt
结果应该是:

RUN pip install -r project/requirements/DEV.txt

我发现在构建过程中这是不可能的,但可能存在一些方法来做到这一点。任何提示我都会很有帮助。

您可以通过在docker compose yaml文件中添加
环境
选项,将环境变量映射到容器中:

version: '2'

services:
  web:
    build: .
    env_file:
      - /etc/web.env
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./backend:/code
    ports:
      - "8000:8000"
    environment:
      - STAGE: ${STAGE}

我之前尝试过它,收到:
错误:撰写文件“/docker Compose.yml”无效,因为:services.web.environment包含{“STAGE”:“”},这是一种无效类型,它应该是字符串
这是因为本地环境中未设置
STAGE
env var。在运行
docker compose up
(将
envfile
替换为您的环境文件名)之前,您可以运行
export$(cat envfile | grep-v'^#')
。上述方法是在本地计算机中设置环境变量,然后将它们映射到docker容器中。另一种可行的方法是将env文件映射到容器中并导出它们。您可以在
设置中添加一行
-/envfile:/code/envfile
,然后执行
运行导出$(cat/code/envfile | grep-v'^#')和&pip安装…
很遗憾,我无法访问我的
环境文件
,即使它在
中。然后尝试第一种方法(从本地文件导出,并将环境变量映射为环境到容器中)尝试使用参考的参数