当前位置: 首页 > 知识库问答 >
问题:

在创建其他服务之前,请在docker compose中等待mysql服务就绪

牛凌
2023-03-14

我试图在我的docker-compose.yaml中使用waet-for-it来等待mysql准备就绪,然后再创建依赖于它的服务。这是我的docker-compose.yaml

version: '3.5'

services:
  mysql:
    image: mysql:5.6
    ports:
      - "3307:3306"
    networks:
      - integration-tests
    environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=mypassword
    entrypoint: ./wait-for-it.sh mysql:3306
networks:
  integration-tests:
    name: integration-tests

尝试使用docker compose运行此操作时出现以下错误:

开始集成tests_mysql_1错误

错误:对于集成-tests_mysql_1无法开启服务mysql:OCI运行时创建失败:container_linux.go:348:启动容器进程导致"exec: \"./ wait-for-it.sh\":stat./wait-for-it.sh:没有这样的文件或目录":未知

错误:for mysql无法启动服务mysql:OCI运行时创建失败:container\u linux.go:348:启动容器进程导致“exec:\”/wait.sh\”:stat./wait-it.sh:没有这样的文件或目录:未知错误:启动项目时遇到错误。

wait it.sh脚本与我的docker compose.yaml文件位于同一级别,因此我不明白为什么找不到它。

共有2个答案

商绍元
2023-03-14

您可以使用docker Dependes_on选项控制服务启动顺序。

潘文乐
2023-03-14

你这里的问题是,你试图执行的东西不是你的形象的一部分。您告诉docker从mysql:5.6创建一个容器,它不包含wait-it.sh,然后您告诉它通过启动wait-it.sh来启动容器。

我建议您创建包含以下内容的自己的图像:

#Dockerfile
FROM mysql:5.6

COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh

然后,您将用映像替换mysql:5.6,您应该能够执行wait-for-it.sh。我也会通过命令而不是入口点来执行它:

#docker-compose.yml
...
mysql:
  image: yourmysql:5.6
  command:  bash -c "/wait-for-it.sh -t 0 mysql:3306"
...

其中-t 0将等待mysql没有超时。

 类似资料:
  • 我有下面的docker-compose,在启动myprogram-app之前,我需要等待jhipster-registry服务启动并接受连接。 我尝试了 healtcheck 方式,遵循官方文档 https://docs.docker.com/compose/compose-file/compose-file-v2/ 但在运行<code>docker compose up</code>时,我遇到了

  • 我正在尝试运行我的应用程序,其中我的Postgresql在Docker中,假设我的数据库Postgresql现在没有运行 并且在我的中: 如何使运行直到服务知道我的正在运行??

  • 我已经在我的Windows7机器上安装了WebLogic12C(12.1.3)。在创建管理服务器并登录之后,我试图创建一个新的托管服务器。但是当我按下create按钮时,显示加载符号需要花费大量时间,最后给出等待完成的错误超时:Activate state:STATE_DISTRIBUTED Target Servers states:AdminServer STATE_DISTRIBUTED。早

  • 我现在的码头工人。yml- 我的码头工人。yml文件包含2个服务。我已经指定postgrasdb服务在python应用程序服务使用之前启动,但是docker没有按照指定的顺序运行服务。如何让postgrasdb服务在python应用程序服务之前运行?我正在运行命令。

  • 内核中其他有用的服务 模块   字符串操作   字符串操作     内存操作   内存操作     双向链表   双向链表     单向链表   单向链表   函数 void  rt_show_version (void)   该函数将打印 rt-thread rtos 的版本信息。   rt_device_t  rt_console_get_device (void)   获取控制台设备句柄  

  • 我在spring中有一个服务,它需要使用十种不同的方法获取数据。 我希望这些方法并行执行,以执行一些DB操作并返回到父线程。但是父线程应该等到所有响应出现,然后返回响应。 在我当前的方法中,我使用反应式mono异步执行所有方法,但主线程不等待订阅者方法完成。 下面是我订阅的两种方法 下面是我的主要方法 以下是我的输出: 我的输出显示,主线程没有等待订阅服务器完成其任务,因此我如何处理这种情况?