Doker-compose 网络互通
编辑
69
2024-05-02
Doker-compose 网络互通
这两天由于购入halo pro,关注到飞致云旗下还有个1Panel,因此打算将服务也全部迁到1Panel,刚好有个可视化面板。
踩坑1:
1Panel默认开启了WAF(哪怕没有购入1Panel专业版也开启),会导致halo有一系列不正常现象。因此,第一件事情,需要将WAF关闭。
具体配置如下:
踩坑2:
接下来就是迁移服务咯,迁移one-api的时候出现了个问题,就是容器之间网络不互通。
查看1Panel-容器-网络
可以看到1panel的docker网络信息,采用的是bridge的形式。
因为one-api需要使用到mysql、redis,因此,先提前在1panel-数据库下进行相关数据库安装:
安装完成后查看下这两个数据库容器的信息:
可以看到,其网段都在 192.168.96.0/20
这个网段下,并且其映射的地址为 127.0.0.1
,也就是只能在这个网段下进行访问,其他网段是不可以进行访问的
开始编写compose 只写需要网络信息的地方
environment:
- SQL_DSN=aaa:123@tcp(db:3306)/one-api
- REDIS_CONN_STRING=redis://redis:6379
- SESSION_SECRET=yyhhyy
- TZ=Asia/Shanghai
可以看到,上面的连接都是用指代的 db
redis
用来指代服务器的ip地址。
我先后尝试用 localhost
以及他们分别对应的 容器ip
进行编写都不行
最后学习了一套写法,仅供参考
environment:
- SQL_DSN=aaa:123@tcp(1Panel-mysql-X3XP:3306)/one-api # 将db修改成mysql容器名称
- REDIS_CONN_STRING=redis://1Panel-redis-QTio:6379 # 将redis修改成redis容器名称
- SESSION_SECRET=yyhhyy
- TZ=Asia/Shanghai
networks:
- 1panel-network # 添加networds设置,请one-api容器ip放到1panel-network网段下,也就是与这些上述两个服务ip在同一网段下
networks:
1panel-network:
external: true # 最后通过external: true指明
解释:
-
网络配置:
one-api
服务现在使用1panel-network
网络,这个网络需要是一个已经存在的网络,通过external: true
指明。 -
环境变量中的连接字符串:
SQL_DSN
现在使用1Panel-mysql-X3XP
这个服务名称进行连接。REDIS_CONN_STRING
同样使用1Panel-redis-QTio
作为服务名称。
也就是分别使用同一网段下的容器名填写即可。
至此,问题解决
不同容器通信技巧:
情形一:
两个容器 都在 同一个docker网络组中
如果两个容器都在同一个docker网络组中,直接在需要网络通信的地方,使用 <容器名>:<容器端口>
情形二:
两个容器 不在 同一个docker网络组中
那么使用 <容器使用的网络模式的网关>:<宿主机端口(也就是映射端口)>
即可
- 1
- 0
-
分享