繁体   English   中英

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

这是为了启动一个 flask 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 ,因为:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM