【问题标题】:Runing multiple mysql containers with different port using host network使用主机网络运行具有不同端口的多个 mysql 容器
【发布时间】:2021-03-07 16:15:21
【问题描述】:

我有一个使用默认端口 3306 在主机上运行的 Mysql 服务器。我想使用网络主机运行一个 MySQL docker 容器,但使用不同的端口。

我的配置是在 docker-compose 文件中定义的。构建镜像并尝试运行容器后,它会启动和关闭并显示端口冲突通知。

有没有办法在启动前动态改变容器端口?我不想使用网桥。

【问题讨论】:

  • 如果您不使用主机网络,请确保您的容器端口与您的主机不同。

标签: mysql docker docker-compose


【解决方案1】:

如果使用主机网络是一项硬性要求,那么 Docker 空间中的任何内容都无法控制或限制服务使用或不使用的端口。您需要更改特定于服务的配置文件、环境变量或命令行参数,以使其在其他地方侦听。

特别是对于侦听单个 TCP 端口的服务器(如大多数数据库和基于 HTTP 的服务器),默认的 Docker 桥/NAT 设置应该可以正常工作;不需要像主机网络和 macvlan 这样的备用设置。如果您愿意使用标准设置,这很简单:

version: '3'
services:
  mysql:
    image: mysql
    ports: ['9999:3306'] # listen on host port 9999 instead

【讨论】:

  • 标准设置效果很好,但对于生产,我认为主机网络会更快。我正在努力避免尽可能多的延迟
  • 使用磁盘支持的事务关系数据库(如 MySQL)执行任何操作都将比主机上 NAT 增加的任何增量延迟慢得多。除非您可以实际测量额外的延迟,否则我会忽略这一点。
【解决方案2】:
docker run --name 'dockername' -e MYSQL_ROOT_PASSWORD='password' -p 1000:3306 -d mysql
docker exec -it 'dockername' mysql -uroot -p
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'password'
flush privileges;

这里的 1000 是您要运行 mysql docker 容器的端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2016-03-10
    • 2019-08-25
    • 1970-01-01
    • 2016-04-08
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多