使用docker容器部署的项目无法访问在主机中安装的mysql?
从项目安全角度考虑,大多数公司在线上项目中都会开启防火墙,并针对指定端口添加白名单的方式进行访问。恰好就遇到了安装在宿主机中的mysql的端口3306没有开启访问,而是需要通过添加ip白名单的方式进行访问。这里mysql和容器部署的项目是在同一个服务器,mysql不是通过容器部署的。
刚开始是先将用户的有线ip和vpn ip添加至服务器的3306端口,但是仍然无法访问到mysql,经过多次尝试然后发现在docker-compose中有指定了docker项目的ipv4_address,然后尝试将该地址添加到mysql的3306端口,成功解决问题。
容器项目docker-compose
executor:
image: redis
ports:
- 1111:1111 #暴露的端口信息和docker run -d -p 80:80 一样
container_name: executor-test #容器名称
networks:
default_net:
ipv4_address: xxx.xxx.xxx.x
environment:
- TZ=Asia/Shanghai
添加白名单命令:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.x" port protocol="tcp" port="3306" accept'
当容器没有指定ipv4_address的时候,docker会默认生成一个容器ip地址,通过如下命令查询:
docker inspect 容器id
显示内容中部分
"Networks": {
"test-compose_default_net": {
"IPAMConfig": {
"IPv4Address": "169.122.178.33"
},
"Links": null,
"Aliases": [
"64c44adf5a89",
"test"
],
"NetworkID": "89284b44b52c5b0e07c9dd26094",
"EndpointID": "d1ae9ead2958450a2123a8566371",
"Gateway": "169.122.178.1",
"IPAddress": "169.122.178.33",
"IPPrefixLen": 12,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "05:48:d0:a0:l0:55",
"DriverOpts": null
}
}
其中 "IPv4Address": "169.122.178.33" 就是docker默认生成的。
来源地址:https://blog.csdn.net/weixin_48922293/article/details/130315808