Spring Boot部署后无法通过hostname访问处在容器中的Nacos
场景:jar包和nacos都部署在docker容器中。
配置文件:
spring:
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: service_nacos:8848
config:
# 配置中心地址
server-addr: service_nacos:8848
上述通过hostname无法访问nacos,但是把它改成容器的虚拟IP就可以访问了,我通过docker container inspect service_nacos
查询发现hostname是配置了的:
{
"Config": {
"Hostname": "service_nacos"
},
"NetworkSettings": {
"Networks": {
"web_common": {
"IPAddress": "172.25.0.5"
}
}
}
}
通过虚拟IP访问的问题是,容器每次启动IP是重新分配的,希望还是通过hostname访问。
有朋友知道什么原因吗?
补充:
docker-compose-base.yml
version: "3"
services:
service_nacos:
hostname: service_nacos
container_name: service_nacos
image: nacos/nacos-server:2.0.0-bugfix
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=service_mysql
- MYSQL_SERVICE_DB_NAME=funadmin_config
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=a123456
volumes:
- ./nacos/log/:/home/nacos/logs
- ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
restart: on-failure
networks:
- web_common
networks:
web_common:
external: true
docker-compose-services.yml
version: "3"
services:
service_gateway:
hostname: service_gateway
container_name: service_gateway
build: ./services/gateway
image: funadmin-gateway:1.0
ports:
- "8080:8080"
external_links:
- service_redis
- service_nacos
- service_mysql
networks:
- web_common
networks:
web_common:
external: true
Dockerfile:
FROM java:8
COPY . /usr/src/funadmin/gateway
WORKDIR /usr/src/funadmin/gateway
ENTRYPOINT ["java","-Dspring.profiles.active=prod","-jar","funadmin-gateway.jar"]
EXPOSE 8080
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以让注册中心运行在host网络模式下,其他微服务通过节点ip注册。