我想使用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,感谢您之前的回复。但是我还有另一个问题,就是我的烧瓶应用程序无法访问该端口。代码如下所示
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选择启用将只在泊坞窗容器本身设置环境变量。不在撰写“ build”期间使用的主机上。
env_file
要将端口定义为env var,应使用此处.env描述的文件
.env
在您的情况下,创建一个.env包含以下内容的文件:
和docker-compose.yml:
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在此docker- compose up过程中使用env var内部。
my-env-file
docker- compose up
具有以下内容的.env文件:
PORT=5432
一个my-env-file有:
POSTGRES_USER=dev POSTGRES_PASSWORD=secret POSTGRES_DB=db
version: ‘3.3’ services: postgres: image: postgres:9.6 container_name: postgres env_file: - my-env-file ports: - ${PORT}:${PORT}