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

gzszwxb4  于 2022-11-23  发布在  Docker
关注(0)|答案(3)|浏览(283)

我无法让mariadb在使用docker-compose文件的docker容器中运行时使用3306以外的其他端口。
我已经阅读了Mariadb/Docker文档,在网上搜索并进行了自己的实验。
1.对接合成文件:

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.停靠文件:

FROM: mariadb: 10.3.14
COPY mydbscript.sql /docker-entrypoint-initdb.d/
EXPOSE 33020
CMD ["mysqld"]

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

rt4zxlrg

rt4zxlrg1#

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

6yoyoihd2#

容器映像静态绑定到:3306。如果您希望更改此设置,则需要构建一个新映像并配置数据库以在其他位置运行。
但是,Docker允许您将其Map(发布)为不同的端口:33020
正确的做法是:

  • 停靠合成MYSQL_TCP_PORT=3306
  • 停靠合成ports: - "33020:3306"
  • 停靠文件EXPOSE 3306(未更改)

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

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

nwlqm0z1

nwlqm0z13#

@DazWilkin,@philip-tzou,这当然是可能的!如何在没有配置文件的情况下设置端口甚至在mariadb的dockerhub-page中也有解释。(https://hub.docker.com/_/mariadb)@Software刚刚犯了一个错误,在docker-compose. yml中使用了“=”而不是“:”。我第一次也是这样做的,因为我从一个docker运行bash文件中复制了环境变量。
此docker-compose.yml(带.env文件)可用于设置mariaDB服务的内部和外部端口:

version: "3.9"
services:
  database:
    image: mariadb:10.8
    container_name: ${db_containername}
    environment:
      MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: yes
      MARIADB_DATABASE: ${db_database}
      MARIADB_USER: ${db_user}
      MARIADB_PASSWORD: ${db_password}
      MYSQL_TCP_PORT: ${db_port_internal}
      MARIADB_AUTO_UPGRADE: 1
      MYSQL_UNIX_PORT: /run/mysqld/mysqld.sock
      MARIADB_MYSQL_LOCALHOST_USER: true
    restart: always
    ports:
      - '${db_port_external}:${db_port_internal}'
    expose:
      - ${db_port_external}
    volumes:
      - 'database_data:/var/lib/mysql'

相关问题