当我运行docker-compose build && docker-compose up redis
时,在docker-compose.yaml
中指定了environment
,在Dockerfile
中指定了RUN env
,我设置的环境变量没有被输出。
为什么这行不通?
我使用的是docker-compose
版本1.4.2。
以下是相关文件:
docker-compose.yaml
与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'
一个月一个月:
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"]
3条答案
按热度按时间ct2axkht1#
这很正常
docker-compose
仅在容器的运行阶段设置docker-compose.yaml
文件中的environment
指令中指定的环境变量,而不在构建阶段设置。因此,如果您执行
docker-compose run --entrypoint "/bin/bash" redis -c env
,您将能够看到您的env变量。如果你想在你的文档文件中设置变量(以便在构建阶段能够看到它们),你可以在你的文档文件中添加
RUN env
:ryevplcw2#
好吧,我已经测试,并发现以下解决方案的docker组成与环境文件或没有环境文件。我将向您展示两种不同的方法
让我们假设你有以下docker组成的yml文件
现在你需要在一个名为docker.env的文件中设置postgres变量。记住你需要把docker_compose. yml文件和docker.env文件放在同一个文件夹中。接下来,在docker.env文件中你需要有如下的数据库变量和值:
现在点击docker-compose up.它应该可以工作了.假设现在你不想在docker-compose. yml文件中指定env文件名,那么你必须这样写docker-compose. yml文件:
现在,您的docker.env文件应该如下所示:
现在点击docker-compose--环境文件docker.env
你可以走了。
nr9pn0ug3#
这是因为当(我猜)您想在
build
块中使用args
时,您正在使用environment
:您的Dockerfile将在(图像)环境中定义
FUN
:environment
块用于定义运行容器的变量(当docker-compose up
时,NOT 当docker-compose build
时)。对类似问题的类似回答可能会引起兴趣: