我有一个mysql数据库的docker映像。
第一次做这项工作时,我将db备份到一个.sql文件,然后从我的docker-compose构建DABASE。
不过,现在我已经做了一些更新,创建了一个新的.sql文件,并且再次通过docker-compose,我想我将获得我的新数据和新更改。
我的docker-comose文件:
services:
mysql:
image: mysql:latest
container_name: mysqldb
cap_add:
- SYS_NICE # CAP_SYS_NICE
# container_name: my_very_special_server
ports:
- 3307:3306
environment:
MYSQL_DATABASE: wedding
MYSQL_ROOT_PASSWORD: SomeRootPassword1!
MYSQL_USER: someuser
MYSQL_PASSWORD: Password1!
volumes:
- ./dbScript/Dump20201018.sql:/docker-entrypoint-initdb.d/Dump20201018.sql
- db_data:/var/lib/mysql
restart: always
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: dev_pma
links:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3307
PMA_ARBITRARY: 1
restart: always
ports:
- 8183:80
server:
container_name: weddingapp_server
build: ./weddingApp-Be
depends_on:
- mysql
environment:
MYSQL_HOST_IP: mysql
ports:
- 4000:4000
links:
- mysql
command: npm run dev
client:
container_name: weddingapp_client
build: ./weddingApp-Fe
ports:
- 3001:3000
environment:
- CHOKIDAR_USEPOLLING=true
tty: true
volumes:
db_data:
构建完成后,我将其旋转起来,发现新的数据没有显示出来,旧的数据仍然缓存在某个地方?
我查看了mysql映像的日志,得到了以下信息:
2020-10-18 20:46:59+00:00[注][Entrypoint]:
MySQL Server 8.0.21-1Debian10已启动。2020-10-18 20:46:59+00:00
[注][入口]:切换到专用用户'mysql'2020-10-18
20:46:59+00:00[注意][Entrypoint]:MySQL Server的入口点脚本
8.0.21-1Debian10已启动。2020-10-18T20:46:59.686360 Z 0[系统][MY-010116][服务器]/usr/sbin/mysqld(mysqld 8.0.21)启动为进程1 2020-10-18T20:46:59.693458 Z 1[系统][MY-013576][InnoDB]
InnoDB初始化已启动。2020-10-18T20:46:59.987115Z1
[System][MY-013577][InnoDB]InnoDB初始化已结束。
2020-10-18T20:47:00.115947 Z 0[系统][MY-011323][服务器]X插件
准备连接。绑定-地址:“::”端口:33060,套接字:
/var/run/mysqld/mysqlx.sock 2020-10-18T20:47:00.196070 Z 0[警告]
[MY-010068][Server]CA证书CA.pem是自签名的。
2020-10-18T20:47:00.196193 Z 0“系统”“MY-013602”“服务器”通道
mysql_main配置为支持TLS。加密连接现在
此通道支持。2020-10-18T20:47:00.200913 Z 0“警告”
[MY-011810][Server]配置--PID-文件:位置不安全
路径中的“/var/run/mysqld”可供所有OS用户访问。考虑
选择不同的目录。2020-10-18T20:47:00.219538 Z 0“系统”
[MY-010931][Server]/usr/sbin/mysqld:已准备好连接。版本:
“8.0.21”套接字:“/var/run/mysqld/mysqld.sock”端口:3306 MySQL
社区服务器-GPL。
我对docker还是个新手,老实说,我不知道我做错了什么。有什么想法吗?
仅当数据目录(/var/lib/mysql
)为空时才执行initdb脚本。
您的数据不是缓存的,而是使用您的卷持久化到您的主机。所以如果这是一个开发工作,您可以简单地删除db_data
卷的内容(或者删除并重新创建它):
docker volume rm db_data
docker volume create db_data