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

时间:2019-05-20 00:01:19

标签: docker docker-compose mariadb containers port

使用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"
  1. Dockerfile:
FROM: mariadb: 10.3.14
COPY mydbscript.sql /docker-entrypoint-initdb.d/
EXPOSE 33020
CMD ["mysqld"]

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

2 个答案:

答案 0 :(得分:0)

容器图像静态绑定到:3306。如果要更改此设置,则需要构建一个新映像并将数据库配置为在其他位置运行。

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

正确的方法是:

  • docker-compose MYSQL_TCP_PORT=3306
  • docker-compose ports: - "33020:3306"
  • Dockerfile EXPOSE 3306(不变)

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

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

答案 1 :(得分:0)

您需要替换默认的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.

像这样配置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