Как использовать порт Docker в коде для сервера - PullRequest
0 голосов
/ 11 июня 2019

У меня есть изображение Docker для Интернета и другое изображение для сервера. Мой сервер использует определенный порт, который я жестко кодирую на сервере и в Интернете. Я также определяю этот порт в файле docker-compose.

Я полагаю, что правильным подходом было бы указать порт только в docker-compose.yml и затем каким-то образом использовать этот порт в коде для сервера и сети вместо жесткого кодирования этого порта в трех разных местах.

Должен ли я использовать переменную окружения в docker-compose.yml? Какое лучшее решение?

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

По моему опыту было бы лучше, если бы сервер выбирал свой собственный "обычный" порт и жесткий код, который в местах, где он появляется на земле Docker.

Допустим, у меня есть серверный процесс, может бытьчто я написал в Go, и я решил, что он хочет прослушивать порт 12345. Затем:

  • Обычное соглашение Go состоит в том, что сервер принимает необязательный аргумент командной строки, например-bind 0.0.0.0:12345, чтобы указать адрес привязки и порт для процесса, но я бы оставил его по умолчанию в моем контейнере Docker.

  • Мой файл Docker для сервера будет EXPOSE 12345,в основном в качестве документации.

  • Для клиента у меня явно была бы опция -server_url http://server:12345, которую я также мог бы установить через переменную окружения SERVER_URL=http://server:12345.По умолчанию он может указывать на localhost для простейшей настройки, ориентированной на разработчика.

  • В моем docker-compose.yml я должен был бы явно указать порт справаблока ports: сервера, если он у меня был, и в клиенте SERVER_URL.

    version: '3'
    services:
      server:
        build: ./server
        ports: ['12345:12345']
      client:
        build: ./client
        environment:
          SERVER_URL: 'http://server:12345'
        ports: ['24680:24680']
    

Обратите внимание, что ports: - это необязательно ,он вам не нужен, если вы не хотите подключаться к фоновой службе извне Docker.Также обратите внимание, что порты не обязательно должны быть одинаковыми, и есть смысл использовать «нормальные» порты для вещей, когда это возможно.Если бы сервер использовал обычный HTTP-порт 80, мне бы не пришлось явно упоминать его в URL-адресе клиента, например.

0 голосов
/ 11 июня 2019

Docker Compose поддерживает Env-файлы , которые позволяют вам объявлять все переменные окружения. Затем вы можете заменить номер порта , используя одну из переменных env .

Файл env, как правило, является хорошей практикой, поскольку его можно легко заменить при переключении в другую среду (например, разработка или производство), и , которые можно установить на лету с помощью команды строка, непосредственно перед запуском вашего кода.

Для многих языков программирования, поддерживающих чтение этих файлов, имеются хорошие библиотеки, такие как Dotenv for Node.js .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...