docker-compose没有设置环境变量

时间:2015-10-13 15:50:17

标签: docker docker-compose

当我运行docker-compose build && docker-compose up redis时,environmentdocker-compose.yamlRUN env Dockerfile中指定了docker-compose,我设置的环境变量不会得到打印。

为什么这不起作用?

我正在使用docker-compose.yaml版本1.4.2。

以下是相关文件:

environment KEY=value作为redis: build: ../storage/redis ports: - "6379:6379" environment: - FOO='bar' 对列表:

docker-compose.yaml

environmentredis: build: ../storage/redis ports: - "6379:6379" environment: - FOO: 'bar' 作为词典:

Dockerfile

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"]

C0

2 个答案:

答案 0 :(得分:6)

这是正常的

SoapClient仅在容器的运行阶段设置class noBisnodePersonClient extends SoapClient { // ... /** * sokPerson * @param noBisnodePersonSok $PersonSokReq * @return noBisnodePersonSokResponse */ public function sokPerson(noBisnodePersonSok $PersonSokReq){ $return = $this->__soapCall( 'sokPerson', array($PersonSokReq), array('uri'=>'http://dbonline.no/webservices/wsdl/PersonInfo') ); $mapper = new JsonMapper(); $object = $mapper->map($return, new noBisnodePersonSokResponse); return $object; } } 文件中docker-compose指令中指定的环境变量,而不是在构建阶段。

因此,如果您执行environment,您将能够看到您的env变量。

如果你想在Dockerfile中设置变量(为了能够在构建阶段看到它们),你可以在你的docker-compose.yaml之前在dockerfile中添加:

docker-compose run --entrypoint "/bin/bash" redis -c env

答案 1 :(得分:0)

嗯 我已经测试并找到了以下解决方案,用于带 env 文件或不带 env 文件的 docker compose。我将向您展示两种不同的方法

假设您有以下 docker compose 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

现在点击 docker-compose up 。它应该工作。 现在假设您不喜欢在 docker-compose.yml 文件中指定 env 文件名。所以你必须像这样编写 docker-compose.yml 文件:

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}

现在你的 docker.env 文件应该是这样的:

PGU=postgres
PGP=postgres
PGD=myapp_db

现在点击 docker-compose --env-file docker.env up

你可以走了。