Как получить порт docker-compose из env_file? - PullRequest
0 голосов
/ 05 октября 2018

Я хочу использовать номер порта, определенный в файле 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, так и для моего приложения фляги?Спасибо

1 Ответ

0 голосов
/ 05 октября 2018

Опция env_file будет устанавливать переменные окружения только в самом контейнере Docker.Не на хосте, который используется во время компоновки.

Чтобы определить свой порт как env var, вы должны использовать файл .env, как описано здесь

В вашем случае создайте файл .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 внутри .env используется во время процесса docker-compose up.

a .env файл с:

PORT=5432

a 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...