如何在 Docker Compose 环境变量中传递文字 ${HOSTNAME} 而不进行评估?

问题描述 投票:0回答:1

我正在进行 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
...

也尝试过单一配额,但它改变了一切。

我做错了什么?谢谢

variables docker-compose yaml escaping
1个回答
0
投票

我做了一个最小的例子,我希望我正确理解你的问题。

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}

环境变量的值包含特殊字符。

© www.soinside.com 2019 - 2024. All rights reserved.