docker 部署 mariadb
发表于|更新于
|阅读量:
前言
docker 部署的优点不言而喻,一旦出现问题,可以删除的干干净净,完全不影响宿主机环境。而且只要宿主机资源足够,想起几个起几个,可以搭建主从节点。
这篇文章主要记录一下部署的步骤,部署过程中遇到的问题,以及如何解决。
docker-compose file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| version: "3.9" services: mariadb: image: mariadb:latest container_name: mariadb command: - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" - "--max_allowed_packet=32505856" - "--transaction-isolation=READ-COMMITTED" - "--binlog-format=ROW" restart: on-failure ports: - "3306:3306" volumes: - ./data/mariadb:/var/lib/mysql - /var/run/mysqld/:/var/run/mysqld/ environment: MYSQL_ROOT_PASSWORD: mariadb MYSQL_DATABASE: mariadb MYSQL_USER: phpcoin MYSQL_PASSWORD: mariadb logging: options: max-size: 1m
|
访问 mariadb
如果我们试图连接到 localhost
上的 MariaDB 服务器,客户端将绕过网络,尝试使用本地文件系统中的套接字文件连接到服务器。然而,当 MariaDB 在容器中运行时,这并不可行,因为服务器的文件系统与主机是隔离的。客户端无法访问容器中的套接字文件,所以它无法连接。
因此,默认情况下与 MariaDB 服务器的连接必须使用TCP
,即使客户端与服务器容器运行在同一台机器上。
1 2 3
| sudo apt install mysql-client -y export mariadb_host=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariadb) mysql -u root -p -h $mariadb_host --protocol=tcp
|
那么如果想要和正常安装的 Mariadb 一样访问有没有什么办法呢?
当然是可以的,可以将 Mariadb 的 socket 映射到宿主机上了,注意这里映射到 socket 的目录即可
1 2 3
| volumes: - ./data/mariadb:/var/lib/mysql - /var/run/mysqld/:/var/run/mysqld/
|
相关参考