mariadb 作为 docker 容器 - 主机挂载绑定上的启动损坏

Posted

技术标签:

【中文标题】mariadb 作为 docker 容器 - 主机挂载绑定上的启动损坏【英文标题】:mariadb as docker container - corrupted startup on host mount binding 【发布时间】:2020-02-20 20:34:48 【问题描述】:

我想将最新的 mariadb:10.4.8 作为 docker 容器运行,其数据文件夹作为主机挂载持久化。

这是我的 docker-compose.yaml

database:
mem_limit: 1073741824
image: mariadb:stable
environment:
  mysql_DATABASE: mydata
  MYSQL_PASSWORD: '123456'
  MYSQL_ROOT_PASSWORD: '12345678'
  MYSQL_USER: mydata
  MYSQL_ROOT_HOST: '%'
stdin_open: true
volumes:
- /opt/mydata/keys/keyfile.key:/etc/mysql/encryption/keyfile.key
- /opt/mydata/keys/keyfile.enc:/etc/mysql/encryption/keyfile.enc
- /opt/mydata/database:/var/lib/mysql
- /opt/mydata/logs:/var/log/mysql
tty: true
cpu_shares: 512
command:
- --max-allowed-packet=100M
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --net-write-timeout=300
- --net-read-timeout=300
- --log-error=/var/log/mysql/mysql-error.log
- --plugin-load-add=file_key_management
- --file-key-management-filename=/etc/mysql/encryption/keyfile.enc
- --file-key-management-filekey=FILE:/etc/mysql/encryption/keyfile.key
- --file-key-management-encryption-algorithm=AES_CTR
- --innodb-encrypt-log=ON
- --innodb-encrypt-tables=FORCE
labels:
  io.rancher.container.pull_image: always

问题是不再创建“mydata”用户 - 我无法以 root 或 mydata 身份登录。 我在“/opt/mydata/database”下看不到任何“mydata”文件夹。 与 phpmadmin 连接会导致:

ERROR 1045 (28000): Access denied for user 'root'@'localhost'(使用 密码:是)

如果这个任务第一次成功 - 没有问题发生,但如果没有,我可以尽可能多地尝试 - 它不会工作。

当我启动这个服务时——第一个 mariadb 容器突然死掉,然后另一个容器启动。

这在完全更新的 Ubuntu 18.04.3 LTS 主机上运行。

每次设置都几乎相同,因为我们的 Container 等使用 terraform 针对 Rancher Container Orchestrtion 进行配置。

我尝试了不同的 docker 版本 18.06 和 18.09 CE。

我现在的想法很短,有什么想法吗?

【问题讨论】:

第一次创建密码时记得吗?尝试使用该密码。您当前的密码似乎不同 thx 但这不是我尝试过的密码相关问题 到目前为止,我在这里尝试了很多,但没有任何帮助。 mariadb 仍然处于我无法使用 root 用户在本地登录的状态。还在“/var/lib/mysql”中创建了一个“test”文件夹,其中只有一个文件 db.opt,没有别的。 我可以建议的一种薄型,但我不确定它是否有效。创建一个带有挂载位置的新容器,一旦登录验证然后尝试一个一个复制db文件并检查它是否能够访问 仅供参考:我们可以在哪里点击github.com/docker-library/mariadb/issues/262 现在尝试降级到 10.3.17 和/或使用 MYSQL_INITDB_SKIP_TZINFO=1 【参考方案1】:

阅读“github.com/docker-library/mariadb/issues/262”后,我降级到 10.3.16。 创建新的 mariadb 可以可靠地使用该版本。 10.3.17、10.3.18 和 10.4.8 都存在上述所有问题。

【讨论】:

以上是关于mariadb 作为 docker 容器 - 主机挂载绑定上的启动损坏的主要内容,如果未能解决你的问题,请参考以下文章

mariadb 在具有主机路径卷的 Kubernetes pod 内崩溃

如何将安装在主机服务器上的 phpmyadmin 连接到正在运行的 docker 容器内的 maria db? [关闭]

多台主机上的 Docker(Windows 和 Ubuntu)

与任何其他主机操作系统相比,CentOS 作为 Docker 主机会导致不同的容器行为

Docker安装MariaDB

使用 CentOS 6 作为 docker 容器的 Ubuntu 主机,如何访问 iptables?