【问题标题】:How to change Docker Mysql container connection port?如何更改 Docker Mysql 容器连接端口?
【发布时间】:2019-01-12 20:19:11
【问题描述】:

我正在使用 node、docker、mysql 和 sequelize,并尝试将 sequelize 连接到在 docker 上运行的 mysql 容器。尽管我已将“端口”更改为 3308-3308,但它只会通过端口 3306 连接。当我查找正在运行的容器时,我得到了 mysql 数据库的以下信息:

ticketgo_database_1      docker-entrypoint.sh mysqld    Up      3306/tcp,                   
                                                                0.0.0.0:3308->3308/tcp

这解释了为什么它只能连接到端口 3306,但我需要从 3306 更改连接端口,因为该端口在我的计算机上很忙。我怎样才能做到这一点?

Mysql 容器:

  database:
    image: mysql
    environment:
      MYSQL_DATABASE: "ticketgo"
      MYSQL_ROOT_PASSWORD: "pass"
    volumes:
     - "./sql:/docker-entrypoint-initdb.d"
    ports:
    - "3308:3308" 

【问题讨论】:

    标签: mysql node.js database express docker


    【解决方案1】:

    我猜你的应用也是由 docker-compose 管理的。无需更改 MySQL 在其自己的容器中侦听的端口。让 squelize 连接到 databade:3306 并且在 MySQL docker compose config 中不指定端口映射或指定:3308:3306 这意味着主机上的端口 3308 将映射到容器端口 3306。这并不意味着 MySQL 会监听 3308。它将继续在其容器 3306 中监听,并​​且主机上的新端口 3308 将映射到它。

    仅当您需要从外部 docker-compose 服务(例如从您主机上的另一个应用程序或 MySQL GUI)访问 MySQL 时才指定端口映射

    【讨论】:

    • 不幸的是,将容器端口重新映射到 3308 并没有通过该端口启用 sequelize 连接。它仍然只能通过端口 3306 连接。我想通过另一个端口连接的原因是因为尝试通过 3306 连接时收到错误消息,提示“端口 3306 已在使用中”。奇怪的是,我没有将 3306 端口用于其他任何事情......
    • 我的计算机上是否有另一个 Mysql 会话正在运行?那只能通过3306连接?我该怎么检查呢?
    【解决方案2】:

    在端口部分,将第二个端口更改为您想要的任何“3308:3309”;

    或者您可以通过 -p 3309:3308 在 shell 中执行此操作

    【讨论】:

    • 正如您在 docker.yml 文件中看到的,我已将端口更改为 3308:3308,但是当我尝试将 sequelize 连接到 mysql-database 时,它​​只会通过 3306 连接,这是我想要更改的
    • @Oscar 你不应该同时改变它们!在 docker.yml 中只需更改端口的第二部分。为什么?因为它将主机(您的 PC 或服务器)端口连接到 Gust(Docker 容器)端口。所以:-p 3308:3306
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2019-09-06
    • 2018-05-05
    • 1970-01-01
    • 2019-01-25
    • 2019-09-18
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多