Я создал следующий файл docker-compose ...
version: '3'
services:
db-service:
image: postgres:11
volumes:
- ./db:/var/lib/postgresql/data
expose:
- 5432
environment:
- POSTGRES_PASSWORD=mypgpassword
networks:
- net1
pgadmin:
image: dpage/pgadmin4
volumes:
- ./pgadmin:/var/lib/pgadmin
ports:
- 5000:80
environment:
- PGADMIN_DEFAULT_EMAIL=me@gmail.com
- PGADMIN_DEFAULT_PASSWORD=mypass
networks:
- net1
networks:
net1:
external: false
После прочтения различных документов на сайте докера я ожидал, что контейнер pgadmin сможет получить доступ к контейнеру postgres через порт5432, но я не могу получить доступ к postgres напрямую с хоста.Тем не менее, я могу использовать psql для доступа к базе данных с хост-машины.
На самом деле, если я закомментирую строки expose и ports, я все равно смогу получить доступ к обоим контейнерам с хоста.
Что мне не хватает в этом?
EDIT - IЯ получаю доступ к контейнеру, выполнив сначала docker container inspect...
, чтобы получить IP-адрес.Для контейнера postgres, который я использую
psql -h xxx.xxx.xxx.xxx -U postgres
Он запрашивает у меня пароль, а затем позволяет мне делать все, что вы ожидаете.
В случае контейнера pgadminЯ указываю своему браузеру на IP-адрес и получаю интерфейс pgadmin.
Обратите внимание, что оба они выполняются из терминала на хосте, а не из одного контейнера.Я также закомментировал команду expose и все еще могу получить доступ к базе данных postgres.