Docker – 编写持久数据MySQL
我似乎无法让MySQL数据持久化,如果我运行$ docker-compose down
.yml
$ docker-compose down
下面的.yml
version: '2' services: # other services data: container_name: flask_data image: mysql:latest volumes: - /var/lib/mysql command: "true" mysql: container_name: flask_mysql restart: always image: mysql:latest environment: MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this MYSQL_USER: 'test' MYSQL_PASS: 'pass' volumes_from: - data ports: - "3306:3306"
我的理解是,在我的data
容器中使用volumes: - /var/lib/mysql
将其映射到我的本地机器目录,在这里mysql将数据存储到容器中,并且由于映射的原因,即使容器被销毁,数据也应该保留。 而mysql
容器只是一个客户端接口到数据库,并可以看到本地目录,因为volumes_from: - data
试图这个答案,它没有工作。 Docker-构成持久性数据问题
编辑
改变我的.yml
,如下所示,并创build一个目录./data
但现在当我运行docker-compose up --build
的mysql
容器不会开始抛出错误说
data: container_name: flask_data image: mysql:latest volumes: - ./data:/var/lib/mysql command: "true" mysql: container_name: flask_mysql restart: always image: mysql:latest environment: MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this MYSQL_USER: 'test' MYSQL_PASS: 'pass' volumes_from: - data ports: - "3306:3306" flask_mysql | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied) flask_mysql | 2016-08-26T22:29:21.182144Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). flask_mysql | 2016-08-26T22:29:21.185392Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
数据容器是一个多余的解决方法。 数据量将为你做的伎俩。 改变你docker-compose.yml
到:
version: '2' services: mysql: container_name: flask_mysql restart: always image: mysql:latest environment: MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this MYSQL_USER: 'test' MYSQL_PASS: 'pass' volumes: - my-datavolume:/var/lib/mysql volumes: my-datavolume:
Docker将在/var/lib/docker/volumes
文件夹中为您创build/var/lib/docker/volumes
。 只要不inputdocker-compose down -v
此卷就会一直存在
有3种方法:
第一。 你需要指定目录来存储你的主机上的mysql数据。 您可以删除数据容器。 你的mysql数据将被保存在本地文件系统上。
Mysql容器定义必须如下所示
mysql: container_name: flask_mysql restart: always image: mysql:latest environment: MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this MYSQL_USER: 'test' MYSQL_PASS: 'pass' volumes: - /opt/mysql_data:/var/lib/mysql ports: - "3306:3306"
第二种方式是在键入docker-compose down
之前提交数据容器:
docker commit my_data_container docker-compose down
第三种方式。 你也可以使用docker-compose stop
代替docker-compose down
(那么你不需要提交容器)
你必须为mysql数据创build一个单独的卷。
所以它会看起来像这样:
volumes_from: - data volumes: - ./mysql-data:/var/lib/mysql
不, /var/lib/mysql
是你的mysql容器中的一个path,并且与主机上的path无关。 你的主机甚至可能根本没有mysql。 所以我们的目标是从一个mysql容器中保存一个内部文件夹。
- 如何在OpenShift中为“docker run”提供参数“oc new-app”?
- 私人gem没有安装在docker上
- 命名的阶段返回:parsing引用时出错:“golang:1.7.3 as builder”不是有效的资源库/标记
- 在容器运行时编辑docker容器设置
- 从docker nginx / php-fpm安装在本地卷(Mac)上的Laravel无法写入会话文件
- docker-compose up给出错误UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xe2:序号不在范围内(128)
- Kubernetes:无法安装仪表板
- 加载docker imager时出错
- 在docker环境中使用命令行应用程序的最佳方式是什么?