![](/img/trans.png)
[英]How to connect local mysql(or docker container mysql) from docker container grafana?
[英]How to save mysql subdirectory on local system from a docker container
我需要从 docker mysql 容器中保存我的数据库,以便其他团队成员也可以使用它。 到目前为止,我们一直在使用它,效果很好:
volumes:
- ./db/:/var/lib/mysql/
但是 /db 文件夹真的很乱,因为 /mysql 文件夹包含所有 mysql 文件,而不仅仅是数据库。 所以我试图只保存数据库文件夹:
volumes:
- ./db/:/var/lib/mysql/database/
但不幸的是,我不断收到此错误:
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] Aborting
然而,尽管错误说明了什么,/db 文件夹是空的(也没有隐藏文件),所以我不知道错误到底是什么。
我还尝试了 /mysql 中的其他子目录并得到了相同的结果。 当我将更改恢复到-./db/:/var/lib/mysql/
时,错误消失了。
完整的 docker-compose.yml:
mysql:
image: mysql:${MYSQL_VERSION:-latest}
restart: always
ports:
- "3306:3306"
volumes:
- ./db/:/var/lib/mysql/${DB_NAME}
networks:
- backend
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_USER: "${DB_USERNAME}"
MYSQL_PASSWORD: "${DB_PASSWORD}"
container_name: ${PROJECT_PREFIX}_mysql
您分享的示例有几点需要注意:
up
之前实际上并没有“初始化”数据库服务器(这是一种常见的做法,因为它使映像大小保持相对较小)volumes
明确挂载它。 因此,每次使用down
/ up
循环时,都会将容器重置为图像的原始 state。down
/ up
,操作顺序如下:
3
点的情况,如果/var/lib/mysql
目录为空,MySQL 的入口点脚本将“初始化”数据库服务器,否则,它将仅从现有文件中加载它。/var/lib/mysql
时,它的工作原理是:
/var/lib/mysql/database
时,只挂载了这个目录,其他重要数据不包含在/var/lib/mysql
中,因为它在原始映像中不存在。 原来缺少的其他重要数据是 MySQL 检查以验证它是否需要“初始化”数据库服务器。 由于缺少数据,它最终尝试初始化,但如果/var/lib/mysql
不为空,则会引发错误(您的错误)。 在这种情况下,它不为空,因为您已将database
目录安装到/var/lib/mysql
中。您的选择基本上是:
/var/lib/mysql
中并备份整个目录(确保仅在docker-compose down
时进行备份!)RUN
步骤来初始化 MySQL 并将其关闭,以便数据库服务器“初始化”并存储在映像中。 但是,我不建议这样做:1)您的 docker 图像大小会大得多,并且 2)此选项容易出现损坏问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.