我使用docker compose来运行我的应用程序。为此,我需要在容器内设置主机(它取决于我正在运行的环境)。
我的方法是:
创建环境文件并设置变量:
#application.env
SERVER_IP=10.10.9.134
我的docker撰写文件如下:
version: '2'
services:
api:
container_name: myApplication
env_file:
- application.env
build: ./myApplication/
entrypoint: ./docker/api-startup.sh
ports:
- "8080:8080"
depends_on:
- redis
extra_hosts: &extra_hosts
myip: $SERVER_IP
但我的问题是变量SERVER_IP永远不会被替换。
当我运行docker-compose配置时,我看到:
services:
api:
build:
context: /...../myApplication
container_name: myApplication
depends_on:
- redis
entrypoint: ./docker/api-startup.sh
environment:
SERVER_IP: 10.10.9.134
extra_hosts:
myip: ''
ports:
- 8080:8080
我尝试使用$ SERVER_IP或$ {SERVER_IP}替换变量引用,但它没有用。
答案 0 :(得分:6)
我创建了一个文件.env
,添加了单行HOST=test.example.com
,然后在docker-compose中执行了此操作:
extra_hosts:
- myip:${HOST}
docker-compose config
然后显示
extra_hosts:
myip: test.example.com
为此,我按照Docker-compose environment variables中有关.env
文件
更新
根据Docker文档,
注意:如果您的服务指定了构建选项,则定义的变量 在构建期间,环境文件不会自动显示。 使用build的args子选项来定义构建时环境 变量
这基本上意味着如果将变量放在.env
文件中,可以在docker-compose.yml
中使用它们进行替换,但如果对特定容器使用env_file
选项,则只能查看Docker容器内的变量,而不是在构建期间。这也是合乎逻辑的,env_file
取代docker run --env-file=FILE ...
而不是其他任何内容。
因此,您只能将您的值放入.env
。或者,正如William所描述的,您可以使用主机的环境变量。
答案 1 :(得分:1)
修改强>
尝试以下方法:
version: '2'
services:
api:
container_name: myApplication
env_file:
- application.env
build: ./myApplication/
entrypoint: ./docker/api-startup.sh
ports:
- "8080:8080"
depends_on:
- redis
extra_hosts:
- "myip:${SERVER_IP}"
确保大括号并且主机操作系统上存在环境变量。