我正在进行 Docker Compose 设置,需要将带有文字 ${HOSTNAME} 格式的环境变量传递给我的应用程序,而 Docker Compose 不会尝试将其解析为环境变量。
这是我的 docker-compose.yml 文件的相关部分:
services:
webapp:
image: webapp-image
build:
context: ..
dockerfile: webapp/Dockerfile
target: base
environment:
- REACT_APP_HOSTNAME=$${HOSTNAME} # <-- escape dollar sign with double dollar
ports:
- 3000:3000
restart: on-failure
healthcheck:
test: curl -X GET http://localhost:3000
start_period: 1m
start_interval: 5s
interval: 20s
timeout: 10s
retries: 3
我会得到的结果是:
services:
webapp:
image: webapp-image
build:
context: ..
dockerfile: webapp/Dockerfile
target: base
environment:
- REACT_APP_HOSTNAME=${HOSTNAME} # <-- single dollar
ports:
- 3000:3000
restart: on-failure
healthcheck:
test: curl -X GET http://localhost:3000
start_period: 1m
start_interval: 5s
interval: 20s
timeout: 10s
retries: 3
但是,做
docker compose -f docker-compose.yml config -o ./docker-compose-final.yml
在 docker-compose-final.yml 中我得到
...
- REACT_APP_HOSTNAME=$${HOSTNAME} # <-- still double dollar
...
而不是
...
- REACT_APP_HOSTNAME=${HOSTNAME} # <-- single dollar sign
...
也尝试过单一配额,但它改变了一切。
我做错了什么?谢谢
我做了一个最小的例子,我希望我正确理解你的问题。
services:
exampleapp:
image: alpine
tty: true
environment:
- EXAMPLE_ENV=$${RETAIN_THIS}
使用
docker compose up -d
启动容器,然后输入它会产生带有美元符号的变量。
$ docker compose up -d
$ docker exec -it code-exampleapp-1 /bin/sh
$ echo $EXAMPLE_ENV // <- in the container
> ${RETAIN_THIS}
环境变量的值包含特殊字符。