Я предполагаю, что вы не работаете в Linux, а используете Docker для рабочего стола. Тогда краткий ответ: удалите network_mode: host
, и настройка compose будет работать так же, как работает ваша команда запуска docker.
version: '3.7'
services:
database:
image: postgres:10.6
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=p0stgr@s
- POSTGRES_DB=eagle_eye_local
Два приведенных вами примера на самом деле не равны, хотя они могут привести к некоторым аналогичным результатам при запуске на реальном хосте Linux (аналогично тому, как на хосте Linux вы сможете получить доступ к экземпляру postgres через * 1005). * на хост-машине).
Если вы запускаете указанный файл компоновки в Docker for Desktop (Mac или Windows), вы должны помнить, что в этом случае на ваших контейнерах работает виртуальная машина, и все команды передаются на эту виртуальную машину. Если вы не используете network_mode: host
, Docker (1) правильно выставит порт на виртуальной машине и (2) установит некоторый прокси-процесс на хост-компьютере (mac / windows) для перенаправления трафика в виртуальную машину. Это в основном не работает, когда вы запускаете контейнер с network_mode: host
.
Вы можете проверить установленное отображение при запуске docker ps
в столбце Ports
. Это будет пустым, если вы запустите с network_mode: host
.
Для получения более подробной информации см. Обсуждения в форуме Docker .