Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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_Docker Compose - Fatal编程技术网

docker compose未设置环境变量

docker compose未设置环境变量,docker,docker-compose,Docker,Docker Compose,当我在docker compose.yaml中指定environment并在Dockerfile中指定docker compose.yaml>和run env时,我设置的环境变量不会被打印出来 为什么这不起作用 我正在使用docker compose1.4.2版 以下是相关文件: docker compose.yaml与environment一起作为KEY=value对的列表: redis: build: ../storage/redis ports: - "6379

当我在
docker compose.yaml
中指定
environment
并在
Dockerfile
中指定
docker compose.yaml>和
run env
时,我设置的环境变量不会被打印出来

为什么这不起作用

我正在使用
docker compose
1.4.2版

以下是相关文件:

docker compose.yaml
environment
一起作为
KEY=value
对的列表:

redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO='bar'
redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO: 'bar'
FROM redis:2.6
MAINTAINER me@email.com

RUN mkdir -p /var/redis && chown -R redis:redis /var/redis

RUN echo '-------------- env ---------------'
RUN env

COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
ENTRYPOINT ["redis-server", "/usr/local/etc/redis/redis.conf"]
docker compose.yaml
environment
一起作为字典:

redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO='bar'
redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO: 'bar'
FROM redis:2.6
MAINTAINER me@email.com

RUN mkdir -p /var/redis && chown -R redis:redis /var/redis

RUN echo '-------------- env ---------------'
RUN env

COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
ENTRYPOINT ["redis-server", "/usr/local/etc/redis/redis.conf"]
Dockerfile

redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO='bar'
redis:
    build: ../storage/redis
    ports:
      - "6379:6379"
    environment:
      - FOO: 'bar'
FROM redis:2.6
MAINTAINER me@email.com

RUN mkdir -p /var/redis && chown -R redis:redis /var/redis

RUN echo '-------------- env ---------------'
RUN env

COPY redis.conf /usr/local/etc/redis/redis.conf
EXPOSE 6379
ENTRYPOINT ["redis-server", "/usr/local/etc/redis/redis.conf"]
这很正常

docker compose
仅在容器的运行阶段设置
docker compose.yaml
文件中的
environment
指令中指定的环境变量,而不是在构建阶段

因此,如果您执行
docker compose run--entrypoint“/bin/bash”redis-c env
,您将能够看到您的env变量

如果要在Dockerfile中设置变量(以便在构建阶段能够看到它们),可以在
运行env
之前在Dockerfile中添加变量:

ENV FOO bar
嗯 我已经测试并发现了docker compose的以下解决方案,包括使用env文件或不使用env文件。我将向您展示两种不同的方法

假设您有以下docker编写的yml文件

version: '3.8'
services:
db:
image: postgres:13
volumes:
 - "./volumes/postgres:/var/lib/postgresql/data"
ports:
 - "5432:5432"
env_file: docker.env

现在需要在名为docker.env的文件中设置postgres变量。请记住,您需要将docker_compose.yml文件和docker.env文件保存在同一文件夹中。 接下来,在docker.env文件中,需要有如下数据库变量和值:

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=myapp_db

version: '3.8'
services:
db:
  image: postgres:13
  volumes:
    - "./volumes/postgres:/var/lib/postgresql/data"
  ports:
    - "5432:5432"
  environments:
     - POSTGRES_USER=${PGU}
     -POSTGRES_PASSWORD=${PGP}
     -POSTGRES_DB=${PGD}

PGU=postgres
PGP=postgres
PGD=myapp_db

现在点击docker撰写。它应该会起作用。 假设现在您不想在docker-compose.yml文件中指定env文件名。因此,您必须像这样编写docker-compose.yml文件:

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=myapp_db

version: '3.8'
services:
db:
  image: postgres:13
  volumes:
    - "./volumes/postgres:/var/lib/postgresql/data"
  ports:
    - "5432:5432"
  environments:
     - POSTGRES_USER=${PGU}
     -POSTGRES_PASSWORD=${PGP}
     -POSTGRES_DB=${PGD}

PGU=postgres
PGP=postgres
PGD=myapp_db

现在,您的docker.env文件应该如下所示:

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=myapp_db

version: '3.8'
services:
db:
  image: postgres:13
  volumes:
    - "./volumes/postgres:/var/lib/postgresql/data"
  ports:
    - "5432:5432"
  environments:
     - POSTGRES_USER=${PGU}
     -POSTGRES_PASSWORD=${PGP}
     -POSTGRES_DB=${PGD}

PGU=postgres
PGP=postgres
PGD=myapp_db

现在点击docker compose--env文件docker.env up


您可以开始了。

当我运行
$docker compose run redis env
时,我得到:
***致命配置文件错误***读取配置文件,在第493>>>“env”指令错误或参数数量错误1
啊,很抱歉,我没有看到您更改入口点。在您的情况下,do
docker compose运行redis/bin/bash-c env
@NeilRunning发出:
错误的指令或错误的参数数
您是说
docker compose
在我自己的shell中设置运行
docker compose up redis
的环境变量吗?如何将
docker compose
环境持久化到容器中?如果这不是自动完成的,
environment
指令的意义是什么?您提到“在构建阶段”,在构建阶段完成后,在哪里可以让容器打印环境?我只希望我正在运行的容器能够访问
docker compose.yml
文件中设置的环境。