有人可以帮忙解决这个问题吗?
#1 楼
Docker实际上为容器之间的联网提供了DNS支持。这意味着,如果您将数据库连接定义为:http://redis:6379
,前提是您满足以下条件,这会将
redis
解析为正确的网络地址:所有容器都在同一网络上
这些容器已被命名为
这可以通过cli启动两个实例来手动完成,也可以通过docker compose自动执行脚本,这是我的建议。在版本3的撰写脚本中,您将定义两个服务(即容器):
version: "3"
services:
web:
build: ./web
container_name: web
networks:
- backend
command: bash -c "./start.sh"
redis:
image: redis:3.2
container_name: redis
networks:
- backend
在文件末尾,定义网络实例应连接到:
networks:
backend:
评论
Docker Compose的版本2引入了服务配置,而不是3。v3是针对Docker Swarm的,而v2具有更多面向主机的功能,这两个功能都是独立开发的,建议v2在Swarm集群之外使用。
–chupasaurus
18-2-5在20:40
没错,它是在v2中引入的。但是,我找不到支持它们独立开发的参考。 3似乎是2的简化:docs.docker.com/compose/compose-file/compose-versioning / ...
–莫里茨
18-2-5在20:51
查看发布页面,仍为v2添加了新功能,而v3现在支持v2中的某些功能(即3.4中的卷名在2.1+中)。
–chupasaurus
18年2月5日在22:46
评论
您的容器具有确切的含义:没有通向主机的路由,您的容器具有不同的IP,您必须为docker run提供适当的参数才能访问主机,我无法从内存中记住它们,但这就是搜索@Tensibai但是我如何能够ping通从容器托管的主机?
我尝试重现,使用命令“ nc -l 8443”启动容器A以侦听该端口,并使用命令“ nc HOST_IP 8443”启动容器B,并且它可以正常工作,容器可以通过主机进行通信。