You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Azure虚拟机上已运行的MySQL Docker容器配置对外端口映射

可行解决方案

生产环境操作前建议先对MySQL做全量备份,避免操作异常导致数据丢失。

方案1:无需重启现有MySQL容器(无停机风险,生产优先选择)

通过iptables端口转发实现宿主机端口到容器端口的映射,不需要改动现有运行的容器:

  1. 先获取MySQL容器的内部IP地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 67b7d4f1eca6

命令执行后会输出容器的内网IP,例如172.17.0.2,下面以该IP为例操作。
2. 配置iptables转发规则,将宿主机3306端口的流量转发到容器的3306端口:

# 配置DNAT转发
iptables -t nat -A DOCKER -p tcp --dport 3306 -j DNAT --to-destination 172.17.0.2:3306
# 允许转发流量通过
iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 3306 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  1. 持久化iptables规则,避免宿主机重启后规则失效:
# 保存规则
iptables-save > /etc/sysconfig/iptables
# 安装iptables服务实现开机自动加载规则
yum install iptables-services -y
systemctl enable --now iptables

注意:该方案依赖容器固定内网IP,如果后续容器重启,内网IP可能发生变化,转发规则会失效,需要重新配置。


方案2:重启容器配置端口映射(配置更稳定,可接受短暂停机可选)

将现有运行的容器提交为镜像,再用新镜像启动带端口映射的容器,操作前请确认可以接受数秒到数分钟的MySQL服务中断:

  1. 提交现有容器为镜像,保留所有现有配置和数据:
docker commit 67b7d4f1eca6 mysql:prod-backup
  1. 查看原有容器的启动参数,确认挂载卷、环境变量等配置,保证新容器启动参数和旧容器完全一致,避免配置或数据丢失。
  2. 停止旧容器,启动带端口映射的新容器:
# 停止旧容器
docker stop 67b7d4f1eca6
# 启动新容器,下面示例的-v、-e等参数请替换为你原有容器的实际配置
docker run -d \
-p 3306:3306 \
--name mysql-prod \
-v /你的宿主机数据目录:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=你的root密码 \
mysql:prod-backup
  1. 验证新容器运行正常、数据完整后,可以自行删除旧容器。

必要的额外配置

配置完成后还需要放开两层访问限制才能从外部访问:

  • 放开宿主机操作系统防火墙的对应端口:
# firewalld防火墙执行以下命令
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
  • 登录Azure控制台,为该虚拟机关联的网络安全组(NSG)添加入站规则,允许你办公网的公网IP访问3306端口,请勿放开0.0.0.0/0全网段访问,避免安全风险。

安全建议:MySQL端口不建议直接暴露到公网,优先通过VPN、跳板机的方式访问,同时MySQL账号仅配置指定IP的访问权限,不要使用%通配符开放全IP访问。


内容的提问来源于stack exchange,提问作者Pradip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:45:03