docker desktop的容器间通信
docker desktop的网络设置
在 Docker 中,当勾选 “Enable host networking”,并使用--net=host
参数启动容器时:
- 和宿主机通信:容器可以直接使用宿主机的网络栈,这意味着容器和宿主机共享相同的网络命名空间。容器内监听的端口,会直接暴露在宿主机上,无需进行端口映射。比如容器内的服务监听在
8080
端口,在宿主机上可以直接通过localhost:8080
访问该服务。 - 不同容器间通信:如果多个容器都使用了主机网络模式(
--net=host
),由于它们都共享宿主机的网络命名空间,那么可以通过localhost:端口
直接进行通信。 但如果只有部分容器使用主机网络模式,其他容器使用默认的桥接网络等模式,那么使用主机网络模式的容器和其他容器通信,就不能单纯通过localhost:端口
了。因为不同网络模式下容器的网络环境不同,需要根据具体网络配置,比如桥接网络中容器有自己独立的 IP 地址,需要通过桥接网络内的 IP 和端口来通信 。
如果不勾选 “Enable host networking”,默认情况下容器运行在桥接网络模式,容器有自己独立的网络命名空间,容器之间以及容器与宿主机之间通过 NAT(数据通信是需要经过网卡的)和端口映射来通信,此时不能直接通过localhost:端口(不经过网卡)
在不同容器间通信。
需要通过ipconfig查看本机ip(或者wsl的ip),通过这个ip进行不同容器间的通信。
或者通过docker inspect查看容器ip addr,使用这个ip通信。
docker创建自定义网络
创建自定义网络
docker network create aichat-network
将所有的容器添加到网络中
docker network connect aichat-network neo4j
docker network connect aichat-network aichat
docker network connect aichat-network postgres
docker network connect aichat-network redis
docker network connect aichat-network ollama
查看容器是否添加到网络中
docker inspect aichat-network
如此设置,docker之间就可以通过 url: jdbc:postgresql://postgres:5432/ai容器名通信