如何暴露mysql端口?

How to expose mysql port?

我正在尝试公开端口 3310 以允许远程 MySQL 连接。到目前为止,我有这个配置:

  database:
    container_name: sfapi_db
    restart: always
    ports:
      - 3310:3306
    build:
      context: ./docker/database
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PWD}
      - MYSQL_ROOT_PASSWORD=${DB_PWD_ROOT}
    volumes:
      - dbdata:/var/lib/mysql
      - type: bind
        source: ./docker/database/my.cnf
        target: /etc/mysql/my.cnf

这是 Dockerfile:

FROM mariadb:latest

CMD ["mysqld"]

EXPOSE 3310

这里是 my.cnf:

[client-server]
# Port or socket location where to connect
port = 3310
socket = /run/mysqld/mysqld.sock

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

当我 运行 docker-compose up --build -d 访问容器列表时,我得到:

我也使用sudo ufw allow 3310在服务器上打开了端口。另外,我不能使用端口 3306,因为它被另一个容器使用,这就是我使用 3310 的原因。

出于某种原因,当我去 there 检查端口 3310 是否打开时,我总是发现它是关闭的。

我该如何解决这个问题?

如果 my.cnf 驻留在容器中。那么使用的端口应该是3306

[client-server]
# Port or socket location where to connect
port = 3306
socket = /run/mysqld/mysqld.sock

因为在容器的上下文中,这是暴露的端口 mysql。

所以可能发生的情况是您公开了 3306 但容器已为 mysql 服务器分配了 3310。所以3306确实是关闭了。