如何配置mariadb docker compose文件以使用3306以外的其他端口?
我无法让mariadb在docker容器中使用docker compose文件运行3306以外的其他端口 我已经阅读了mariadb/docker文档,在线搜索并进行了自己的实验如何配置mariadb docker compose文件以使用3306以外的其他端口?,docker,docker-compose,mariadb,containers,port,Docker,Docker Compose,Mariadb,Containers,Port,我无法让mariadb在docker容器中使用docker compose文件运行3306以外的其他端口 我已经阅读了mariadb/docker文档,在线搜索并进行了自己的实验 docker编写文件: Dockerfile: 它从不使用端口33020。它仍然使用端口3306。如何在运行时通过docker compose文件动态传递端口?容器映像静态绑定到:3306。如果希望更改此设置,则需要构建新映像并将数据库配置为在其他位置运行 但是,Docker允许您将其映射(发布)为不同的端口:3302
它从不使用端口33020。它仍然使用端口3306。如何在运行时通过docker compose文件动态传递端口?容器映像静态绑定到
:3306
。如果希望更改此设置,则需要构建新映像并将数据库配置为在其他位置运行
但是,Docker允许您将其映射(发布)为不同的端口:33020
正确的方法是:
- docker compose
MYSQL\u TCP\u端口=3306
- docker compose
端口:-“33020:3306”
- Dockerfile
(未更改)公开3306
:3306
,但外部(从主机)数据库将在:33020
上公开
NB在docker compose(网络)中,其他容器必须继续引用端口上的数据库
:3306
您需要替换默认的my.cnf
来指定MariaDB/MySQL的自定义端口:
cd/where/your/docker-compose.yml/locate
docker run-it/cat/etc/mysql/my.cnf>my.cnf
#使用任意文本编辑器打开my.cnf,搜索“port=3306”
#并将其替换到您想要的端口。
按如下方式配置docker-compose.yml:
版本:“3.1”
服务:
db:
图片:mariadb
重新启动:始终
卷数:
-类型:绑定
来源:./my.cnf
目标:/etc/mysql/my.cnf
环境:
-MYSQL\u ROOT\u PASSWORD=mypassword
#在此处添加其他配置
您似乎必须通过修改my.cnf文件来修改端口。但这正是我试图解决的问题,在docker compose(网络)中,我需要其他容器来引用端口上的数据库,例如3320(3306除外)。此外,是否有其他创造性方法通过传递“-port=33020”来解决此问题但后来它抱怨要阅读文档以了解如何以root身份运行它,但这也不起作用,我得到了错误“无法打开和锁定特权表:表'mysql.host'不存在”,在线解决方案没有解决这个问题。示例(在Docker文件中):CMD mysld--user mysql--port=33020在:33020
上向主机公开数据库的一个副作用是,您可以从其他容器通过此端口访问它,但可以通过主机而不是通过compose网络名(db
)访问它。您最好更改希望数据库位于:33020上的容器的配置,或者——正如@philip tzou建议的那样,更改my.cnf
(端口
设置)。
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"]