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_env
和 dotenv_values
。
Docker version 20.10.14, build a224086
供将来参考:如前所述 ,OP 将 sudo
用于 运行 容器命令。
因此,鉴于 sudo
默认情况下重置环境(出于安全目的,除非使用 CLI 选项 sudo -E
),不保留关键的环境变量。
实际上请注意,在 Docker 上下文中,运行 容器命令通常不需要 sudo
,因为:
- 容器中的默认用户已经拥有管理员权限,
- 或者容器进程不需要权限,在这种情况下 best practice amounts to using a non-privileged user for running the dockerized web service (see also this blog article:
4. Don’t run containers as root
).
我有以下 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_env
和 dotenv_values
。
Docker version 20.10.14, build a224086
供将来参考:如前所述 sudo
用于 运行 容器命令。
因此,鉴于 sudo
默认情况下重置环境(出于安全目的,除非使用 CLI 选项 sudo -E
),不保留关键的环境变量。
实际上请注意,在 Docker 上下文中,运行 容器命令通常不需要 sudo
,因为:
- 容器中的默认用户已经拥有管理员权限,
- 或者容器进程不需要权限,在这种情况下 best practice amounts to using a non-privileged user for running the dockerized web service (see also this blog article:
4. Don’t run containers as root
).