当我运行docker-compose build && docker-compose up redis
时,environment
中docker-compose.yaml
和RUN 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
environment
以redis:
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
答案 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
你可以走了。