写法:
db:
image: mysql:8.0
volumes:
- ./:/docker-entrypoint-initdb.d
- D:/GoWork/dockerspace:/var/lib/mysql
ports:
- "3310:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: "123456"
container_name: tmysql
restart: always
上面的写法是正确的,我编排失败的原因是在于我的根目录中同时存在.sql跟.sh文件,这两个类型的文件都能够被识别,造成初始化失败。
我的解决办法是将.sql文件单独放在一个目录中:
db:
image: mysql:8.0
volumes:
- ./db/mysql_serve/init:/docker-entrypoint-initdb.d
- D:/GoWork/dockerspace:/var/lib/mysql
ports:
- "3310:3306"
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: "123456"
container_name: tmysql
restart: always
另一个可能会造成初始化失败的因素在于docker关联了外部存储。在我们初始化sql数据的时候需要将对应的外部数据清空,然后再执行命令(网上有看到说.gitignore文件没关系,这个没尝试)
最后一个是如果sql文件中有一个命令出错,那么该行命令以下的表都会创建失败,改行命令之前的无影响
所以所有的步骤为:
//停止容器
docker-compose stop
//清空外部存储
...
//重启容器
docker-compose up -d
执行完毕之后我们可以去数据库查看发现已经成功。