繁体   English   中英

docker-compose mysql init sql 未执行

[英]docker-compose mysql init sql is not executed

我正在尝试设置一个 mysql docker 容器并执行 init sql 脚本。 不幸的是,sql 脚本没有执行。 我究竟做错了什么?

version: '3.3'
services:
  api:
    container_name: 'api'
    build: './api'
  ports:
    - target: 8080
      published: 8888
      protocol: tcp
      mode: host
  volumes:
    - './api:/go/src/app'
  depends_on:
    - 'mysql'
 mysql:
  image: 'mysql:latest'
  container_name: 'mysql'
  volumes:
    - ./db_data:/var/lib/mysql:rw
    - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  restart: always
  environment:
    MYSQL_USER: test
    MYSQL_PASSWORD: test
    MYSQL_ROOT_PASSWORD: test
    MYSQL_DATABASE: test
  ports:
    - '3306:3306'
volumes:
  db_data:

我用docker-compose up -d --build执行文件

docker-entrypoint-initdb.d文件夹只会在容器创建(实例化)时运行一次,因此您实际上必须执行docker-compose down -v以在下次运行时重新激活它。

如果您希望能够随时添加 sql 文件,您可以在此处查看专门的 MySql docker 映像... http://ivo2u.nl/o4

许多容器化应用程序,尤其是有状态的应用程序,有一种运行init脚本的方法(如这里的 sql 脚本),并且它们应该只运行一次

由于它们是有状态的,卷是容器在容器重启时是否运行init脚本的真实来源。

与您的情况一样,删除用于绑定安装的文件夹或使用新命名的卷应该重新运行任何存在的init脚本。

这些脚本在您创建容器时运行,而不是每次启动时运行。

您可以docker-compose up --force-recreate mysql强制这些脚本重新运行。

此外,如果您有这样的卷./db_data:/var/lib/mysql:rw ,那么您还需要在重新创建容器之前删除./db_data

我不是码头专家,但这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM