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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从env_file获取docker-compose的端口?相关的知识,希望对你有一定的参考价值。

我想使用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)

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

答案

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开始于撰写。 my-env-file中的环境变量在容器内是已知的,.env中的env var在docker-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}

以上是关于如何从env_file获取docker-compose的端口?的主要内容,如果未能解决你的问题,请参考以下文章

Docker 在多容器 Elastic Beanstalk 中编写 env_file

docker-compos

ubuntu18.04在线安装dockernvidia-docker2与docker-compos

从环境文件中读取环境变量

aws eb cli Windows 在 colorama 上获取版本错误

shell脚本读取配置文件参数