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

MySQL容器无法在Docker Compose中运行初始化脚本

杨雪松
2023-03-14
问题内容

我在让我的MySQL容器运行来自Docker Compose的一些初始化脚本(创建一些数据库)时遇到问题。根据Docker
Hub上的文档,我将.sql文件挂载在其中,/docker-entrypoint-initdb.d但无济于事。

我的撰写文件如下:

version: '2'

services:
  database:
    image: mysql
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./scripts/db:/docker-entrypoint-initdb.d

  myservice:
    image: company/myservice
    expose:
      - "10001"
    depends_on:
      - database
    links:
      - database
    environment:
      SERVICE_PORT: 10001
      DATABASE_URL: jdbc:mysql://database:3306/myservice?autoReconnect=true&useSSL=false&characterEncoding=UTF-8

的内容./scripts/db只有1个文件init-databases.sql

CREATE DATABASE myservice;

一旦启动,MySQL正在运行,但未创建数据库。服务容器还成功链接到MySQL容器。扑向MySQL容器;初始化脚本已成功安装在正确的位置。

有人可以在这里看到一些明显的问题吗?

撰写日志

database_1   | 2016-04-01T05:35:55.020279Z 0 [Note] mysqld (mysqld 5.7.11) starting as process 1 ...
database_1   | 2016-04-01T05:35:55.023277Z 0 [Note] InnoDB: PUNCH HOLE support available
database_1   | 2016-04-01T05:35:55.023305Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
database_1   | 2016-04-01T05:35:55.023316Z 0 [Note] InnoDB: Uses event mutexes
database_1   | 2016-04-01T05:35:55.023324Z 0 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
database_1   | 2016-04-01T05:35:55.023332Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
database_1   | 2016-04-01T05:35:55.023344Z 0 [Note] InnoDB: Using Linux native AIO
database_1   | 2016-04-01T05:35:55.023491Z 0 [Note] InnoDB: Number of pools: 1
database_1   | 2016-04-01T05:35:55.023566Z 0 [Note] InnoDB: Using CPU crc32 instructions
database_1   | 2016-04-01T05:35:55.028689Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
database_1   | 2016-04-01T05:35:55.041026Z 0 [Note] InnoDB: Completed initialization of buffer pool
database_1   | 2016-04-01T05:35:55.047324Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
database_1   | 2016-04-01T05:35:55.061537Z 0 [Note] InnoDB: Highest supported file format is Barracuda.
database_1   | 2016-04-01T05:35:55.076895Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
database_1   | 2016-04-01T05:35:55.076987Z 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
database_1   | 2016-04-01T05:35:55.095683Z 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
database_1   | 2016-04-01T05:35:55.096484Z 0 [Note] InnoDB: 96 redo rollback segment(s) found. 96 redo rollback segment(s) are active.
database_1   | 2016-04-01T05:35:55.096540Z 0 [Note] InnoDB: 32 non-redo rollback segment(s) are active.
database_1   | 2016-04-01T05:35:55.096931Z 0 [Note] InnoDB: Waiting for purge to start
database_1   | 2016-04-01T05:35:55.147986Z 0 [Note] InnoDB: 5.7.11 started; log sequence number 11992841
database_1   | 2016-04-01T05:35:55.148204Z 0 [Note] Plugin 'FEDERATED' is disabled.
database_1   | 2016-04-01T05:35:55.149262Z 0 [Note] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
database_1   | 2016-04-01T05:35:55.149443Z 0 [Warning] CA certificate ca.pem is self signed.
database_1   | 2016-04-01T05:35:55.150272Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
database_1   | 2016-04-01T05:35:55.151068Z 0 [Note] InnoDB: Buffer pool(s) load completed at 160401  5:35:55
database_1   | 2016-04-01T05:35:55.152775Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
database_1   | 2016-04-01T05:35:55.154441Z 0 [Note] IPv6 is available.
database_1   | 2016-04-01T05:35:55.154553Z 0 [Note]   - '::' resolves to '::';
database_1   | 2016-04-01T05:35:55.154571Z 0 [Note] Server socket created on IP: '::'.
database_1   | 2016-04-01T05:35:55.156680Z 0 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
database_1   | 2016-04-01T05:35:55.156738Z 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
database_1   | 2016-04-01T05:35:55.158280Z 0 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
database_1   | 2016-04-01T05:35:55.165273Z 0 [Note] Event Scheduler: Loaded 0 events
database_1   | 2016-04-01T05:35:55.173462Z 0 [Note] mysqld: ready for connections.
database_1   | Version: '5.7.11'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

问题答案:

检查这是否是docker-compose问题(例如问题115,重定向到问题2266)

我认为该错误与构建无关,它很可能是卷。
Compose会保留卷,这样您就不会丢失数据(在下一发行版中将有更好的记录)。

要删除这些卷,请运行docker-compose rm -vf。下次您进行docker-compose时,它应该从新的空卷开始。

根据hub.docker.com/mysql,还检查这是否不是同步问题:

如果在容器启动时没有初始化数据库,则将创建一个默认数据库。尽管这是预期的行为,但这意味着在初始化完成之前它将不接受传入的连接。
这在使用自动化工具(例如docker-compose)时可能会引起问题,该工具会同时启动多个容器



 类似资料:
  • 我正在尝试使用具有以下java代码示例的程序在docker容器中导入KERAS文件: 如果我在WSL2中运行该程序,它可以正常工作,但是如果我在docker容器中运行它,我会收到以下错误: ServletHolder.java:799JAF_G1000xpto.jaf.protocols.json.JSONServletxpto.jaf.JafError调用操作方法失败java.lang.NoCl

  • 22. 初始化容器 上节课我们学习了容器的健康检查的两个探针:liveness probe(存活探针)和readiness probe(可读性探针)的使用方法,我们说在这两个探针是可以影响容器的生命周期的,包括我们之前提到的容器的两个钩子函数PostStart和PreStop。我们今天要给大家介绍的是Init Container(初始化容器)。 Init Container就是用来做初始化工作的容

  • 大家好,我是Kotlin语言的新手,在运行Hello World代码的过程中遇到了一些错误。 无法为初始化脚本'C:\User\HP\AppData\Local\Temp\wrapper_init.gradle'打开初始化泛型类缓存(C:\User\HP. gradle\cache\6.8\script\5mjee5vr2mabvexqryui51pg)。 缺陷源单元“BuildScript”中的

  • 我有一个docker-compose文件,如下所示,它有两个容器。一个是MySQL DB,另一个是读/写DB的Python爬虫应用程序。当我执行时,我看到: 已生成DB容器 然后生成应用程序容器 然后运行应用程序容器上的CMD(例如启动我的爬网程序) 然后根据docker-compose文件中的环境变量在DB容器中初始化我的数据库。 我的问题是为什么我的爬虫脚本在我的数据库在DB容器中创建之前运行

  • 我试图在一个课程中使用xampp,但我无法使tomcat正常工作,我得到的错误是: Tomcat启动/停止时出现错误,返回代码:1确保安装了Java JDK或JRE,并且所需端口空闲,有关详细信息,请检查“/xampp/tomcat/logs”文件夹 我见过很多有这个问题的人,但他们得到的建议都没有帮助我摆脱它。 我已经确定了环境变量如下所示: CATALINA_HOME:C:\XAMPP\Tom

  • 问题内容: 我想在容器的MySQL上设置初始数据。在docker-compose.yml中,此类代码可以在运行容器时创建初始数据。 但是,运行时如何在Kubernetes上创建初始数据? 问题答案: 根据MySQL Docker映像README,与容器启动时的数据初始化有关的部分是确保所有初始化文件都已安装到容器的文件夹中。 您可以在中定义初始数据,然后将相应的卷挂载到pod中,如下所示: