使用docker-compose文件在docker容器中运行mariadb时,无法使用mariadb使用3306以外的其他端口。
我已经阅读了mariadb / docker文档,在线搜索并进行了自己的实验。
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"
FROM: mariadb: 10.3.14
COPY mydbscript.sql /docker-entrypoint-initdb.d/
EXPOSE 33020
CMD ["mysqld"]
它从不使用端口33020。它仍然使用端口3306。如何在运行时通过docker-compose文件动态传递端口?
答案 0 :(得分:0)
容器图像静态绑定到:3306
。如果要更改此设置,则需要构建一个新映像并将数据库配置为在其他位置运行。
但是,Docker允许您将其映射(发布)为其他端口:33020
。
正确的方法是:
MYSQL_TCP_PORT=3306
ports: - "33020:3306"
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