当前位置: 首页 > 面试题库 >

docker-compose mysql init sql未执行

严易安
2023-03-14
问题内容

我正在尝试设置一个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


问题答案:

许多容器化的应用程序,尤其是有状态的应用程序,都有一种运行init脚本的方式(例如此处的sql脚本), 并且 它们只能运行 一次

并且由于它们是有状态的,因此对于容器是否init在容器重新启动时运行脚本而言,卷是事实的来源。

与您的情况类似,删除用于绑定安装的文件夹或使用新的命名卷应重新运行init存在的所有脚本。



 类似资料:
  • 我有以下DockerFile: 这是什么意思:switch的值丢失了,我如何运行它?谢谢你的帮助 更新 请参阅此处:docker ASP.NET核心容器在mysql容器之后启动以获取更多信息。很抱歉有类似的第二个线程。请删除此线程

  • 我试图让我的docker db容器在创建时自动用数据集填充数据库。根据mariadb留档,卷中有一个文件夹可用于此目的。 我设置了我的文件来镜像我在StackOverflow上找到的示例,但是仍然无法执行我的SQL脚本。以下是我的文件的相关部分: 在文件,我有一个文件: 在每次测试迭代之前,我会清理所有旧的/缓存的Docker内容: 我发现这实际上并没有删除数据库卷。运行仍会显示过去存在的卷 Do

  • 问题内容: 我正在尝试在MySQL容器启动时创建多个数据库。根据https://github.com/docker- library/mysql/pull/18 ,我可以在映像的中装载或复制脚本,它们将在启动时自动执行。 但是我的脚本根本没有执行。好像在目录中看不到文件。 这是我的Dockerfile: 这是我的: 我构建并运行容器: 当我在tty中访问容器时,可以看到处于,但未执行。 我看到了输

  • 我正在尝试为elasticsearch 1.7运行docker容器。下面是我的Dockerfile: Docker build运行良好。但是docker run命令给了我这个错误:来自守护进程的错误响应:oci运行时错误:container\u linux。go:265:启动容器进程导致“exec:\“elasticsearch\”:在$PATH中找不到可执行文件” 我使用的Mac和Docker版

  • 我已经检查了垃圾箱,里面没有ping

  • 我对Docker完全是个新手。我尝试像下面这样启动一个已退出的容器, > 我使用列出了所有可用的容器。它列举了以下内容: 我输入以下命令来启动处于退出阶段的容器,并进入该映像的终端。