Как уже говорилось, отдельные контейнеры будут подключаться к сети по умолчанию Docker Bridge с именем контейнера.
Так как вы не упомянули имя контейнера и он не разрешает службу по имени, указанному в файле свойств
eureka.client.serviceUrl.defaultZone=http://discovery:8761/eureka
Чтобы заставить его работать, запуская контейнеры напрямую, используйте ip контейнера eureka-server
# start eureka server container
$ docker run --name eureka-server -p 8081:8081 -d -rm eureka-server
# start eureka client container
$ docker run --name eureka-client -p 8082:8082 -d --rm -e EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://172.17.0.2:8081/eureka eureka-client
Проверьте мостовую сеть по умолчанию, чтобы найти подключенные контейнеры и их ips
$ docker network inspect bridge
"Containers": {
"4e4ce0e24091bda8e78805faad7ee31ba12fe5cd266c9d8a51dacf5b88813a67": {
"Name": "eureka-client",
"EndpointID": "edb2d9b333e6b974cfcf939e1585847c82c7ddebde5c44065f1e101ff12cb2bd",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"c4534a928c71430414b95324a3626aa5c0bf6535a5ffce1fe38a060cfc07d0df": {
"Name": "eureka-server",
"EndpointID": "af82ea5ca05283bac6634ee877e8e3c40c7cdbe7d3c2126bfb53c9db1747d0cc",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
Идеальным решением является использование docker compose.
докер-compose.yml
version: '3.7'
services:
eureka-server:
image: eureka-server
ports:
- "8080:8080"
eureka-client:
build: eureka-client
ports:
- "8082:8082"
environment:
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka-server:8080/eureka
Подробнее здесь:
Связать контейнеры в докере по умолчанию