繁体   English   中英

docker-compose 失败 sayin 图像不存在

[英]docker-compose failing sayin image doesn't exist

我正在尝试进行一个非常困难的多步骤 docker 设置,并将其变成一个简单的 docker-compose。 我之前没有真正使用过 docker-compose。 我习惯于使用 dockerfile 来构建和映像,然后使用类似

docker run --name mysql -v ${PWD}/sql-files:/docker-entrypoint-initdb.d ... -h mysql -d mariadb:10.4

然后在构建简单的 dockerfile 后以相同的方式运行 Web 应用程序。 试图将这些组合成一个 docker-compose.yml 文件似乎相当困难。 我将发布我的 docker-compose.yml 文件,编辑以删除密码等和我收到的错误,希望有人能找出它失败的原因,因为我不知道......

docker-compose.yml

version: "3.7"

services:

    mysql:
        image: mariadb:10.4
        container_name: mysql
        environment:
            MYSQL_ROOT_PASSWORD: passwordd1
            MYSQL_ALLOW_EMPTY_PASSWORD: "true"
        volumes:
            - ./sql-files:/docker-entrypoint-initdb.d
            - ./ssl:/var/lib/mysql/ssl
            - ./tls.cnf:/etc/mysql/conf.d/tls.cnf
        healthcheck:
            test: ["CMD", "mysqladmin ping"]
            interval: 10s
            timeout: 2s
            retries: 10
            
    web:
        build: ./base/newdockerfile
        container_name: web
        hostname: dev.website.com
        volumes:
            - ./ssl:/etc/httpd/ssl
            - ./webfiles:/var/www
        depends_on:
            mysql:
                condition: service_healthy
        ports:
            - "8443:443"
            - "8888:80"
        entrypoint:
            - "/sbin/httpd"
            - "-D"
            - "FOREGROUND"

在终端窗口中运行docker-compose up时出现的错误是...

服务 'web' 依赖于未定义的服务 'mysql'。

为什么mysql是未定义的。 它是 yml 文件中的第一个定义,并具有与之关联的健康检查。 此外,它失败得非常快,比如在几秒钟内,所以不可能所有运行状况检查都运行并失败,而且我在终端窗口中没有收到任何其他错误。 我执行docker-compose up并在几秒钟内收到该错误。 任何帮助将不胜感激。 谢谢你。

根据这个文件

在启动 web 之前, depends_on不会等待 db 和 redis “准备好” - 只在它们启动之前。 如果您需要等待服务准备就绪,请参阅控制启动顺序以了解有关此问题的更多信息以及解决该问题的策略。

设计您的应用程序使其在数据库不可用或尚未设置时具有弹性是我们所有人都必须处理的问题。 Healthcheck 不保证您的数据库在下一阶段之前准备就绪。 最好的方法可能是编写一个等待它的脚本等待并在depends-on后运行它:

depends_on:
  - "db"
command: ["./wait-for-it.sh"] 

暂无
暂无

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

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