docker-compose:等待一个容器运行,然后再运行另一个容器

问题描述 投票:0回答:1

在此示例中,仅当在mysql:3036上显示mysql容器时,我才要运行pyramida容器。我尝试使用wait-for-it.sh,但如何在棱镜容器内使用此功能?https://github.com/vishnubob/wait-for-it

version: '3.7'
services:
  prisma:
    image: prismagraphql/prisma:1.34.8
    restart: always
    depends_on:
      - mysql
    ports:
      - '4466:4466'

    environment:
      PRISMA_CONFIG: |
        port: 4466
        databases:
          default:
            connector: mysql
            host: mysql
            user: root
            password: prisma
            rawAccess: true
            port: 3306
            migrations: true



  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: prisma
    volumes:
      - ./persistence/test/mysql:/var/lib/mysql
  redis:
    image: redis:5-alpine
    command: redis-server
    ports:
      - 6379:6379
    volumes:
      - ./persistence/test/redis:/data
    hostname: redis
    restart: always
    # env_file: ${ENV_FILE}

docker docker-compose dockerfile docker-container
1个回答
0
投票

如果要使用wait-for-it.sh等待服务mysql:3036可用,则必须为该图像构建自己的图像FROM prismagraphql/prisma:1.34.8COPY wait-for-it.sh。之后,您将必须创建一个自定义的启动脚本,该脚本将调用wait-for-fit.sh,然后调用exec这是主要的prisma进程。

例如Dockerfile

FROM prismagraphql/prisma:1.34.8
COPY wait-for-it.sh /
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

例如entrypoint.sh

#!/usr/bin/env bash
/wait-for-it.sh mysql:3036   #add timeout if you want `-t 10s`
exec /app/start.sh "$@"

棘手的部分是找出图像中的开始脚本。有时,您会在项目存储库中找到一个公开的Dockerfile,或者您必须检查图像,例如docker image inspect prismagraphql/prisma:1.34.8 --format '{{.ContainerConfig.Entrypoint}}'

© www.soinside.com 2019 - 2024. All rights reserved.