如何配置 mariadb docker-compose 文件以使用 3306 以外的其他端口?

Sof*_*are 5 port containers mariadb docker docker-compose

当使用 docker-compose 文件在 docker 容器中运行 mariadb 时,我无法让 mariadb 使用 3306 以外的其他端口。

我已经阅读了 mariadb/docker 文档,在线搜索并进行了自己的实验。

  1. docker-compose 文件:
version: '3.1'

services:

  db:
    image: mariadb
    restart: always
    environment:
    - MYSQL_ROOT_PASSWORD=mypassword
    - MYSQL_TCP_PORT=33030
    - MYSQL_UNIX_PORT=33020
    ports:
    - "33020:33020"
Run Code Online (Sandbox Code Playgroud)
  1. Dockerfile:
FROM: mariadb: 10.3.14
COPY mydbscript.sql /docker-entrypoint-initdb.d/
EXPOSE 33020
CMD ["mysqld"]
Run Code Online (Sandbox Code Playgroud)

它从不使用端口 33020。它仍然使用端口 3306。如何在运行时通过 docker-compose 文件动态传递端口?

Phi*_*zou 5

您需要替换默认值my.cnf来为 MariaDB/MySQL 指定自定义端口:

cd /where/your/docker-compose.yml/located

docker run -it mariadb cat /etc/mysql/my.cnf > my.cnf

# use any text editor your like to open my.cnf, search for "port = 3306"
# and replace it to the port you like to have.
Run Code Online (Sandbox Code Playgroud)

像这样配置你的 docker-compose.yml :

version: '3.1'

services:

  db:
    image: mariadb
    restart: always
    volumes:
    - type: bind
      source: ./my.cnf
      target: /etc/mysql/my.cnf
    environment:
    - MYSQL_ROOT_PASSWORD=mypassword
    # add your other configurations here
Run Code Online (Sandbox Code Playgroud)


Daz*_*kin 3

容器镜像静态绑定到:3306. 如果您希望更改此设置,则需要构建新映像并将数据库配置为在其他地方运行。

但是,Docker 允许您将其映射(发布)为不同的端口:33020

执行此操作的正确方法是:

  • docker 撰写MYSQL_TCP_PORT=3306
  • docker 撰写ports: - "33020:3306"
  • Dockerfile EXPOSE 3306(未更改)

容器(内部)将正确引用,:3306但外部(从主机)数据库将公开在:33020.

注意:在 docker-compose(网络)内,其他容器必须继续引用端口上的数据库:3306