Администратор через Docker — могу ли я диктовать HTTP-порт?

Я немного борюсь с Docker и портами, но вот моя ситуация. У меня есть файл компоновки Docker, который запускает базу данных Postgres и администратора, графический интерфейс администратора. Вот мой (усеченный) конфиг:

  # database
  db:
    image: postgres:14.2
    volumes:
      - .psqlrc:/root/.psqlrc:ro
      - dbdat:/var/lib/postgresql/data
      - ./log:/root/log:cached
      - ./latest.dump:/latest.dump
    environment:
      POSTGRES_DB: hlp-api-dev
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      DB_PORT: 5432
    ports:
      - 5432
    healthcheck:
      test: pg_isready -U postgres -h 127.0.0.1
      interval: 5s

  # database admin
  dbAdmin:
    image: adminer
    ports:
      - 8080
    depends_on:
      - db

Все это работает нормально, но HTTP-доступ к администратору, по-видимому, является случайным портом, выбранным Docker, например.

http://localhost:57014

... что я могу узнать, только нажав кнопку браузера рядом с его контейнером в Docker Desktop. Как я могу продиктовать этот порт, и почему он недоступен по адресу

http://localhost:8080

... какой порт указан?

Если я попытаюсь указать другой порт, т.е.

ports:
  - 8080
  - 5000 # my choice

... тогда он вообще не крутится ни на одном порту. Даже если я нажму кнопку браузера в DD, я получу «сброс соединения» в браузере.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, ты можешь. Если вы укажете два номера порта как xxxx:yyyy, первый будет портом хоста, а второй будет портом внутреннего контейнера, который прослушивает приложение. Администратор слушает 8080, чтобы он был зафиксирован. Но вы можете свободно выбирать хост-порт. Итак, чтобы получить к нему доступ по http://localhost:5000/, вы должны сделать

  # database admin
  dbAdmin:
    image: adminer
    ports:
      - 5000:8080
    depends_on:
      - db

Вы можете сделать то же самое в контейнере Postgres, если хотите.

Спасибо, это работает. Так я ошибался, думая, что - 8080 эквивалентно - 8080:8080? И если я прав, почему он не был доступен на локальном хосте: 8080?

Mitya 23.04.2022 18:20

Когда вы используете синтаксис - 8080, Docker сопоставляет случайный порт на хосте с портом 8080 в контейнере. Вы почти всегда хотите указать порт хоста самостоятельно и использовать синтаксис - 5000:8080.

Hans Kilian 23.04.2022 18:36

Понятно! Я (ошибочно) предположил, что указание одного значения удваивает его, как если бы я поместил одно и то же значение дважды, разделенное двоеточием.

Mitya 23.04.2022 18:58

Другие вопросы по теме