Docker Compose中能否通过网桥IP+自定义端口访问服务?
问题解答
实际访问情况
直接说结论:没法通过172.22.0.11:3307访问。
原因很简单:ports: - 3307:3306是把主机的3307端口转发到容器内部的3306端口,相当于在主机上开了个“中转站”,但容器自己的IP(172.22.0.11)上只监听了3306端口,根本没开3307端口,所以直接访问容器IP的3307端口自然连不上。
同时保留两项配置时,能用的访问方式还是原来两种:
- 主机上用
localhost:3307访问(走端口映射的中转) - 同一Docker网络里的其他容器,或者主机直接访问
172.22.0.11:3306(走容器内网IP)
怎么实现172.22.0.11:3307访问?
要实现这个需求,得让MySQL容器本身监听3307端口,步骤如下:
写自定义MySQL配置文件
创建一个my.cnf文件,内容如下:[mysqld] port=3307 bind-address=0.0.0.0修改Docker Compose配置
把自定义配置挂载到容器里,同时按需调整端口映射(如果还要主机能访问的话):services: mysql: image: mysql:8.0 volumes: - ./my.cnf:/etc/mysql/my.cnf # 挂载自定义配置文件到容器 networks: my_network: ipv4_address: 172.22.0.11 ports: - 3307:3307 # 可选:主机端口映射到容器的3307端口 networks: my_network: driver: bridge ipam: config: - subnet: 172.22.0.0/27重启容器
执行docker-compose down && docker-compose up -d重启服务后,就能通过172.22.0.11:3307访问MySQL了。如果保留了ports配置,主机侧也能继续用localhost:3307访问。
内容的提问来源于stack exchange,提问作者Shod
相关产品推荐
相关产品推荐

