【问题标题】:docker-compose: wait for a container to be run before running another containerdocker-compose:在运行另一个容器之前等待一个容器运行
【发布时间】:2020-04-20 13:27:38
【问题描述】:

在这个例子中,我想运行 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}

【问题讨论】:

标签: docker docker-compose dockerfile docker-container


【解决方案1】:

如果您想使用wait-for-it.sh 等待服务mysql:3036 可用,则必须为该图像构建自己的图像FROM prismagraphql/prisma:1.34.8COPY wait-for-it.sh。之后,您必须创建一个自定义启动脚本,该脚本将调用 wait-for-fit.shexec 主 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}}'

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多