Подключение к БД в docker-контейнере из другого docker-контейнера
Имеется Java приложение, работающее в контейнере Docker. Оно пытается подключиться к БД Postgres, которое так же работает в Docker-контейнере. Оба живут на одном сервере, и подключены к одной docker-сети, каждому контейнеру дано определённое имя.
docker network inspect gitlabci
[
{
"Name": "gitlabci",
"Id": "2bef428d1ac728aa7e177c55716e2347eb70c6080a81ed63cfb48034acfc31da",
"Created": "2022-11-15T16:31:04.474082241+03:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"152e59a27e70570d4f8ff8732742f0a8ad87226930bf14ffcef9932e0cc44ee8": {
"Name": "auth-runner",
"EndpointID": "580921d16d87e0939fa622197c55e98e207e4b6ea929dcea814470ed388a4f05",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"d1de071f33b7db58d456562b1eb113ce912d5c3e5d49886f074485d83edb301c": {
"Name": "postgres-auth-db",
"EndpointID": "f90b410948d2ec9380567d048bd37db3f91cc323366e42cdb802abefe89ddb2b",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Если зайти напрямую в контейнер с приложением docker exec -it auth-runner bash, и оттуда вызвать контейнер с БД curl postgres-auth-db:5432, то в ответ получаю curl: (52) Empty reply from server, что указывает на корректное соединение, но пустой ответ.
В Java приложении в файле application.properties для подключения прописана такая строчка: spring.datasource.url=jdbc:postgresql://postgres-auth-db:5432/simpleauthdb. К сожалению это не работает, и при сборке в maven на этапе тестов, при инициализации подключения к базе получаю ошибку Caused by: java.net.UnknownHostException: postgres-auth-db
Возможно я что-то делаю не верно, прошу помочь разобраться. В любом случае моя задача - указать приложению подключение к базе.
P.S. Если кто-то решит сказать, что не нужно кидать базу в контейнер и все дела - я в курсе. В моём случае это только болванка для корректного прохождения тестов.
Дополнение, файл docker-compose.yml
version: "3.7"
services:
db:
image: postgres:12
container_name: postgres-auth-db
restart: always
depends_on:
- runner
environment:
- POSTGRES_USER=simpleauth
- POSTGRES_PASSWORD=simpleauthpassword
- POSTGRES_DB=simpleauthdb
ports:
- "5432:5432"
runner:
image: gitlab/gitlab-runner:latest
container_name: auth-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/drunner/auth-runner:/etc/gitlab-runner:z
Дополнение второе
/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: files
group: files
shadow: files
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Значит первым делом я беру настройки из файла hosts. Вот и он:
/etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.0.3 7e899edbaf1e
172.20.0.2 postgres-auth-db
Сеть поменялась по сравнению с началом вопроса, так как я перешёл от варианта самостоятельного создания сети docker к docker-compose.
Ответы (1 шт):
В общем ничего не получилось и после двух дней тщетных попыток я решил не использовать БД в docker-контейнере.