docker-compose编排mysql时初始化数据失败原因

写法:

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

执行完毕之后我们可以去数据库查看发现已经成功。

你可能感兴趣的:(docker-compose编排mysql时初始化数据失败原因)