gpt4 book ai didi

docker - 如何从 env_file 获取 docker-compose 的端口?

转载 作者:行者123 更新时间:2023-12-01 08:22:13 29 4
gpt4 key购买 nike

我想使用 env 文件中定义的端口号,可以吗?
以下是我的 docker-compose.yml 的内容:

version: '3'
services:
flask:
build:
context: ./flask
dockerfile: Dockerfile_flask
env_file:
- env_file.env
ports:
#- "5000:5000"
- "${PORT}:${PORT}" # I want to set port defined in the env file
volumes:
- ./logs:/app/flask/log
restart: always

这是 env_file.env 的内容
PORT=5000

但是出现了一些错误:
WARNING: The PORT variable is not set. Defaulting to a blank string.
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.flask.ports is invalid: Invalid port ":", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]

如果可能,我该怎么做?谢谢

@lvthillo,感谢您之前的回复。但我还有另一个问题,即在我的 Flask 应用程序中无法访问该端口。代码如下
import os
from flask import Flask

application = Flask(__name__)

print(os.getenv("PORT")) # this is None
my_port = int(os.getenv("PORT", 5000)) # so my_port here is 5000, but I want it to be 5002 defined in .env

@application.route("/api/test", methods=['POST'])
def index():
print('hello')

if __name__ == "__main__":
application.run(host="0.0.0.0", port=my_port)

因为flask 应用程序需要使用与容器相同的端口运行。有什么方法可以为 docker-compose 和我的 Flask 应用程序在 env 文件中设置端口?谢谢

最佳答案

env_file optin 只会在 docker 容器本身中设置环境变量。不在撰写“构建”期间使用的主机上。

要将您的端口定义为 env var,您应该使用 .env文件如所述 here

在你的情况下创建一个 .env包含:的文件

PORT=5000

docker-compose.yml :
version: '3'
services:
flask:
build:
context: ./flask
dockerfile: Dockerfile_flask
ports:
#- "5000:5000"
- "${PORT}:${PORT}" # I want to set port defined in the env file
volumes:
- ./logs:/app/flask/log
restart: always

如果您想使用 env_file 将环境变量添加到您的容器中,您可以再次添加它。

为了让这个例子完全清楚:
一个 postgres 从 compose 开始。 my-env-file中的环境变量在容器内部是已知的,内部的 env var .envdocker-compose up 期间使用过程。
.env文件:
PORT=5432
my-env-file与:
POSTGRES_USER=dev
POSTGRES_PASSWORD=secret
POSTGRES_DB=db

docker-compose.yml :
version: ‘3.3’
services:
postgres:
image: postgres:9.6
container_name: postgres
env_file:
- my-env-file
ports:
- ${PORT}:${PORT}

关于docker - 如何从 env_file 获取 docker-compose 的端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664673/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com