簡體   English   中英

docker-compose:等待一個容器運行后再運行另一個容器

[英]docker-compose: wait for a container to be run before running another container

在這個例子中,我想運行 prisma 容器,只有當 mysql 容器暴露在mysql:3036上時。 我嘗試使用wait-for-it.sh但如何在 prisma 容器中使用它? 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}

如果您想使用wait-for-it.sh來等待服務mysql:3036可用,則必須FROM prismagraphql/prisma:1.34.8構建自己的映像並COPY 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}}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM