docker 未设置 compose .env 变量

docker compose .env variables not set

我有以下 docker-compose.yml:

version: "3.9"

services:
  compute:
    build: .
    ports:
      - "27030:27030"
    environment:
      - COMPUTE_HOST=$COMPUTE_HOST
      - COMPUTE_PORT=$COMPUTE_PORT

在我的 .env 文件中,我有以下内容:

COMPUTE_HOST="0.0.0.0"
COMPUTE_PORT=27030

这是为了启动烧瓶 api,但是当我 运行 容器时我得到的是:

docker compose --env-file .env up --build

docker-compose --env-file .env up --build

这是:

apv_compute-compute-1  | APV server starting on port None ...
apv_compute-compute-1  |  * Serving Flask app 'api' (lazy loading)
apv_compute-compute-1  |  * Environment: production
apv_compute-compute-1  |    WARNING: This is a development server. Do not use it in a production deployment.
apv_compute-compute-1  |    Use a production WSGI server instead.
apv_compute-compute-1  |  * Debug mode: on
apv_compute-compute-1  |  * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
apv_compute-compute-1  |  * Restarting with stat
apv_compute-compute-1  |  * Debugger is active!
apv_compute-compute-1  |  * Debugger PIN: 483-995-326

api坚持从127.0.0.1:5000开始提示根本没有设置环境变量

如果我按如下方式更改我的撰写文件,它也不起作用:

    environment:
      - COMPUTE_HOST="0.0.0.0"
      - COMPUTE_PORT=27036

很可能不是因为 .env 文件的问题。当 运行 在 docker 之外运行应用程序时,它工作得很好。

*** 更新 ***

环境变量实际上是在容器内部设置的,因为 docker exec image_tag env 给出:

COMPUTE_HOST=0.0.0.0
COMPUTE_PORT=27030

此外,如果我 bash 放入容器,echo $COPMUTE_PORT 给出正确的值。

所以这要么是 dotenv 没有选择它,要么是设置这些变量的时间导致 dotenv 没有及时得到它们。

我试过 load_envdotenv_values

Docker version 20.10.14, build a224086

供将来参考:如前所述 ,OP 将 sudo 用于 运行 容器命令。

因此,鉴于 sudo 默认情况下重置环境(出于安全目的,除非使用 CLI 选项 sudo -E),不保留关键的环境变量。

实际上请注意,在 Docker 上下文中,运行 容器命令通常不需要 sudo,因为: