我无法让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文件动态传递端口?
3条答案
按热度按时间rt4zxlrg1#
您需要替换默认的
my.cnf
来为MariaDB/MySQL指定自定义端口:如下所示配置您的docker-compose.yml:
6yoyoihd2#
容器映像静态绑定到
:3306
。如果您希望更改此设置,则需要构建一个新映像并配置数据库以在其他位置运行。但是,Docker允许您将其Map(发布)为不同的端口
:33020
。正确的做法是:
MYSQL_TCP_PORT=3306
ports: - "33020:3306"
EXPOSE 3306
(未更改)容器(内部)将正确引用
:3306
,但外部(从主机)数据库将在:33020
上公开。NB在docker-compose(network)内,其他容器 * 必须 * 继续引用端口
:3306
上的数据库。nwlqm0z13#
@DazWilkin,@philip-tzou,这当然是可能的!如何在没有配置文件的情况下设置端口甚至在mariadb的dockerhub-page中也有解释。(https://hub.docker.com/_/mariadb)@Software刚刚犯了一个错误,在docker-compose. yml中使用了“=”而不是“:”。我第一次也是这样做的,因为我从一个docker运行bash文件中复制了环境变量。
此docker-compose.yml(带.env文件)可用于设置mariaDB服务的内部和外部端口: