Docker Compose는 Y를 시작하기 전에 컨테이너 X를 기다립니다.


325

여기 에서 dockm -compose와 함께 rabbitmq와 간단한 파이썬 샘플을 사용하고 있습니다 . 내 문제는 rabbitmq가 완전히 시작될 때까지 기다려야한다는 것입니다. 지금까지 검색 한 결과 y (rabbitmq)가 시작될 때까지 컨테이너 x (내 경우에는 worker)로 기다리는 방법을 모르겠습니다.

다른 호스트가 온라인 상태인지 확인하는 블로그 게시물을 찾았습니다 . 이 도커 명령 도 찾았습니다 .

기다림

사용법 : docker wait CONTAINER [CONTAINER ...]

컨테이너가 멈출 때까지 차단 한 다음 종료 코드를 인쇄하십시오.

컨테이너가 멈추기를 기다리는 것은 아마도 내가 찾고있는 것이 아니지만 그것이 있다면 docker-compose.yml 내에서 해당 명령을 사용할 수 있습니까? 지금까지 내 해결책은 몇 초 기다렸다가 포트를 확인하는 것이지만 이것이 달성하는 방법입니까? 기다리지 않으면 오류가 발생합니다.

docker-compose.yml

worker:
    build: myapp/.
    volumes:
    - myapp/.:/usr/src/app:ro

    links:
    - rabbitmq
rabbitmq:
    image: rabbitmq:3-management

python hello 샘플 (rabbit.py) :

import pika
import time

import socket

pingcounter = 0
isreachable = False
while isreachable is False and pingcounter < 5:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect(('rabbitmq', 5672))
        isreachable = True
    except socket.error as e:
        time.sleep(2)
        pingcounter += 1
    s.close()

if isreachable:
    connection = pika.BlockingConnection(pika.ConnectionParameters(
            host="rabbitmq"))
    channel = connection.channel()

    channel.queue_declare(queue='hello')

    channel.basic_publish(exchange='',
                          routing_key='hello',
                          body='Hello World!')
    print (" [x] Sent 'Hello World!'")
    connection.close()

작업자를위한 Dockerfile :

FROM python:2-onbuild
RUN ["pip", "install", "pika"]

CMD ["python","rabbit.py"]

2015 년 11 월 업데이트 :

쉘 스크립트 나 프로그램 내부를 기다리는 것이 가능한 해결책 일 수 있습니다. 그러나이 문제를 본 후 docker / docker-compose 자체의 명령 또는 기능을 찾고 있습니다.

그들은 건강 점검을 구현하기위한 솔루션을 언급하는데, 이것이 최선의 선택 일 수 있습니다. 열린 TCP 연결이 서비스 준비 또는 준비 상태를 의미하지는 않습니다. 그 외에도 dockerfile에서 진입 점을 변경해야합니다.

그래서 나는 docker-compose on board 명령으로 대답을 바라고 있습니다.이 문제를 끝내면 좋을 것입니다.

2016 년 3 월 업데이트

컨테이너가 "사용중인"지 여부를 판별하기위한 기본 제공 방법을 제공하기위한 제안 이 있습니다 . 따라서 docker-compose는 가까운 장래에 사용할 수 있습니다.

2016 년 6 월 업데이트

버전 1.12.0에서 상태 점검이 도커에 통합 된 것으로 보입니다.

2017 년 1 월 업데이트

도커 작성 솔루션을 찾았습니다 .Docker Compose는 Y를 시작하기 전에 컨테이너 X를 기다립니다.


2
분산 시스템의 내결함성을 장려하기 위해 docker-compose 2.3에서는 상태 검사 사용이 더 이상 사용되지 않습니다. 참조 : docs.docker.com/compose/startup-order
Kmaid

답변:


284

마지막으로 docker-compose 방법으로 솔루션을 찾았습니다. docker-compose 파일 형식 2.1 이후로 정의 할 수 있습니다 상태 확인 .

나는 예제 프로젝트 에서 그것을했다 는 1.12.0+ 적어도 고정 표시기에 설치해야합니다. curl이 공식 이미지에 설치되어 있지 않기 때문에 rabbitmq 관리 Dockerfile확장 해야했습니다 .

이제 rabbitmq-container의 관리 페이지가 사용 가능한지 테스트합니다. curl이 종료 코드 0으로 끝나면 컨테이너 응용 프로그램 (python pika)이 시작되고 hello queue에 메시지가 게시됩니다. 이제 작동합니다 (출력).

docker-compose (버전 2.1) :

version: '2.1'

services:
  app:
    build: app/.
    depends_on:
      rabbit:
        condition: service_healthy
    links: 
        - rabbit

  rabbit:
    build: rabbitmq/.
    ports: 
        - "15672:15672"
        - "5672:5672"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:15672"]
        interval: 30s
        timeout: 10s
        retries: 5

산출:

rabbit_1  | =INFO REPORT==== 25-Jan-2017::14:44:21 ===
rabbit_1  | closing AMQP connection <0.718.0> (172.18.0.3:36590 -> 172.18.0.2:5672)
app_1     |  [x] Sent 'Hello World!'
healthcheckcompose_app_1 exited with code 0

Dockerfile (rabbitmq + curl) :

FROM rabbitmq:3-management
RUN apt-get update
RUN apt-get install -y curl 
EXPOSE 4369 5671 5672 25672 15671 15672

버전 3은 더 이상 depend_on 조건 양식을 지원하지 않습니다 . 따라서 depend_on에서 실패시 다시 시작했습니다. 이제 내 응용 프로그램 컨테이너가 작동 할 때까지 2-3 번 다시 시작되지만 여전히 진입 점을 덮어 쓰지 않고 도커 작성 기능입니다.

docker-compose (버전 3) :

version: "3"

services:

  rabbitmq: # login guest:guest
    image: rabbitmq:management
    ports:
    - "4369:4369"
    - "5671:5671"
    - "5672:5672"
    - "25672:25672"
    - "15671:15671"
    - "15672:15672"
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:15672"]
        interval: 30s
        timeout: 10s
        retries: 5

  app:
    build: ./app/
    environment:
      - HOSTNAMERABBIT=rabbitmq
    restart: on-failure
    depends_on:
      - rabbitmq
    links: 
        - rabbitmq

6
@svenhornberg ping는 ICMP를 사용하므로 TCP 포트를 지원하지 않습니다. 어쩌면 ncTCP 포트를 테스트합니다. 아마도 psql -h localhost -p 5432무언가 를 사용 하고 쿼리하는 것이 좋습니다.
Matt

36
버전 3에서 "종속"이 제거되었습니다. docs.docker.com/compose/compose-file/#dependson
nha

48
@nha 그것은 condition형태 depends_on가 제거 된 것처럼 보이지만 depends_on그 자체는 여전히 v3에 있습니다
akivajgordon

14
depends_onwith condition가 제거 된 경우 상태 확인을 어떻게 사용하여 시작 순서를 제어 할 수 있습니까?
프란츠

42
아직도 그런 고통을 믿기 어렵다
npr

71

기본적으로 아직 불가능합니다. 이 기능 요청 참조 .

지금까지 컨테이너에서 그렇게해야합니다. CMD 필요한 모든 서비스가있을 때까지 .

에서 DockerfileCMD 당신은 랩이 컨테이너 서비스를 시작하는 것을 자신의 시작 스크립트를 참조 할 수있다. 시작하기 전에 다음과 같은 종속 항목을 기다립니다.

도커 파일

FROM python:2-onbuild
RUN ["pip", "install", "pika"]
ADD start.sh /start.sh
CMD ["/start.sh"]

start.sh

#!/bin/bash
while ! nc -z rabbitmq 5672; do sleep 3; done
python rabbit.py

아마 당신은에 netcat을 설치해야합니다 Dockerfile 에게도 . 파이썬 이미지에 사전 설치된 것이 무엇인지 모르겠습니다.

간단한 tcp 포트 검사를 위해 사용하기 쉬운 대기 로직을 ​​제공하는 몇 가지 도구가 있습니다.

더 복잡한 대기의 경우 :


CMD의 의미를 설명해 주시겠습니까? 이것은 포트 검사와 같이 내 프로그램이해야한다는 것을 의미합니까? 아니면 리눅스에서 특정 CMD를 의미합니까?
svenhornberg

설명해 주셔서 감사합니다. 귀하의 답변을 찬성합니다. 그러나 앞으로 예정된 기능 요청이 내 질문에 대한 올바른 답변이라고 생각합니다.
svenhornberg 9

44

이 문제를 사용 restart: unless-stopped하거나 restart: always해결할 수 있습니다.

containerrabbitMQ가 준비되지 않은 상태에서 작업자 가 중지되면 완료 될 때까지 다시 시작됩니다.


3
이 경우이 솔루션이 마음에 들지만 실행되는 하위 프로세스 중 하나가 실패 할 때 종료되지 않는 컨테이너에서는 작동하지 않습니다. 예를 들어, Tomcat 컨테이너는 실행 된 Java 서블릿이 데이터베이스 서버에 연결하지 못한 경우에도 계속 실행됩니다. 물론 Docker 컨테이너는 Tomcat과 같은 서블릿 컨테이너를 대부분 불필요하게 만듭니다.
Derek Mahar

@DerekMahar, REST 호출 만 제공하는 Java 기반 웹 애플리케이션이있는 경우 Jetty / Tomcat 대신 무엇을 사용합니까?
JoeG

2
@JoeG, Tomcat은 Tomcat이 아닌 많은 응용 프로그램을 호스팅 할 수있는 서블릿 컨테이너를 의미했습니다. Docker는 전자를 주로 불필요하게 만드는 반면, 마이크로 서비스에 대해서는 전자를 더 많이 사용합니다.
Derek Mahar

35

최근에 그들은 depends_on기능을 추가했습니다 .

편집하다:

작성 버전 2.1 이상 depends_on에서 healthcheck이를 달성하기 위해 함께 사용할 수 있습니다 .

문서에서 :

version: '2.1'
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: redis
    healthcheck:
      test: "exit 0"

버전 2.1 이전

계속 사용할 수는 depends_on있지만 종속 서비스가 시작되기 전에 준비된 경우가 아니라 서비스 시작 순서 에만 영향을줍니다 .

버전 1.6.0 이상이 필요한 것 같습니다.

사용법은 다음과 같습니다.

version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres 

문서에서 :

서비스 간 특급 종속성. 두 가지 영향이 있습니다.

  • docker-compose up은 종속성 순서대로 서비스를 시작합니다. 다음 예에서 db 및 redis는 웹보다 먼저 시작됩니다.
  • docker-compose up SERVICE는 SERVICE의 종속성을 자동으로 포함합니다. 다음 예제에서 docker-compose up 웹은 db 및 redis를 생성하고 시작합니다.

참고 : 이해하지만 컨테이너가로드되는 순서가 설정됩니다. 컨테이너 내부의 서비스가 실제로로드되었다는 보장은 없습니다.

예를 들어, postgres 컨테이너 가 작동했을 수 있습니다. 그러나 postgres 서비스 자체는 여전히 컨테이너 내에서 초기화되고있을 수 있습니다.


10
dnephin 은 다음 같이 썼습니다. depend_on은 단지 주문입니다. 실제로 다른 컨테이너의 시작을 지연 시키려면 프로세스 자체 초기화가 완료된시기를 감지 할 수있는 방법이 필요합니다.
svenhornberg

15
"버전 3은 더 이상 조건 양식을 지원하지 않습니다 depends_on." docs.docker.com/compose/compose-file/#dependson
akauppi

depends_on컨테이너가 ready상태 가 될 때까지 기다리지 마십시오 (귀하의 경우 의미 할 수 있음). 컨테이너가 '실행 중'상태가 될 때까지만 대기합니다.
htyagi

19

예를 들어 명령 옵션에 추가 할 수도 있습니다.

command: bash -c "sleep 5; start.sh"

https://github.com/docker/compose/issues/374#issuecomment-156546513

포트에서 기다리려면 다음과 같이 사용할 수도 있습니다

command: bash -c "while ! curl -s rabbitmq:5672 > /dev/null; do echo waiting for xxx; sleep 3; done; start.sh"

대기 시간을 늘리려면 조금 더 해킹 할 수 있습니다.

command: bash -c "for i in {1..100} ; do if ! curl -s rabbitmq:5672 > /dev/null ; then echo waiting on rabbitmq for $i seconds; sleep $i; fi; done; start.sh"

13

restart: on-failure 나를 위해 속임수를 썼다. 아래 참조

---
version: '2.1'
services:
  consumer:
    image: golang:alpine
    volumes:
      - ./:/go/src/srv-consumer
    working_dir: /go/src/srv-consumer
    environment:
      AMQP_DSN: "amqp://guest:guest@rabbitmq:5672"
    command: go run cmd/main.go
    links:
          - rabbitmq
    restart: on-failure

  rabbitmq:
    image: rabbitmq:3.7-management-alpine
    ports:
      - "15672:15672"
      - "5672:5672"


7

netcat ( docker-wait 스크립트 사용)을 사용하여 서비스가 작동하기를 기다리는 엔드 포인트를 설정하여이 문제를 해결할 수도 있습니다 . 나는 여전히 깨끗한 command섹션을 가지고 있으며 docker-compose.yml응용 프로그램에 도커 특정 코드를 추가 할 필요가 없으므로이 접근법을 좋아 합니다.

version: '2'
services:
  db:
    image: postgres
  django:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    entrypoint: ./docker-entrypoint.sh db 5432
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

그럼 당신의 docker-entrypoint.sh:

#!/bin/sh

postgres_host=$1
postgres_port=$2
shift 2
cmd="$@"

# wait for the postgres docker to be running
while ! nc $postgres_host $postgres_port; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

>&2 echo "Postgres is up - executing command"

# run the command
exec $cmd

이것은 현재 공식 도커 문서에 문서화되어 있습니다.

추신 : netcat사용할 수없는 경우 도커 인스턴스에 설치해야 합니다. 이렇게하려면 Docker파일에 추가 하십시오.

RUN apt-get update && apt-get install netcat-openbsd -y 

4

대기에 사용할 수있는 " docker-wait " 라는 유틸리티를 사용할 준비가되었습니다 .


1
고마워하지만 쉘 스크립트 일 뿐이므로 h3nrik 응답이나 파이썬 내부에서 대기하는 것과 같습니다. docker-compose 자체의 기능이 아닙니다. 당신의 모습이있다 github.com/docker/compose/issues/374 그들이 가장 좋은 방법 일 것 상태 검사를 구현할 계획입니다. 열린 TCP 연결이 서비스 준비 또는 준비 상태를 의미하지는 않습니다. 또한 dockerfile에서 진입 점을 변경해야합니다.
svenhornberg

3

여러 가지 방법을 시도했지만 이것의 단순함을 좋아했습니다. https://github.com/ufoscout/docker-compose-wait

docker compose 파일에서 ENV vars를 사용하여 다음과 같이 "기다려야"하는 서비스 호스트 (포트 포함) 목록을 제출할 수 있다는 아이디어입니다 WAIT_HOSTS: postgres:5432, mysql:3306, mongo:27017.

따라서 다음 docker-compose.yml 파일 (레포 README 에서 복사 / 붙여 넣기)이 있다고 가정 해 봅시다 .

version: "3"

services:

  mongo:
    image: mongo:3.4
    hostname: mongo
    ports:
      - "27017:27017"

  postgres:
    image: "postgres:9.4"
    hostname: postgres
    ports:
      - "5432:5432"

  mysql:
    image: "mysql:5.7"
    hostname: mysql
    ports:
      - "3306:3306"

  mySuperApp:
    image: "mySuperApp:latest"
    hostname: mySuperApp
    environment:
      WAIT_HOSTS: postgres:5432, mysql:3306, mongo:27017

다음으로 서비스를 기다리려면 Dockerfile에 다음 두 줄을 추가해야합니다 (다른 서비스가 시작되기를 기다려야하는 서비스의 Dockerfile에).

ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.5.0/wait /wait
RUN chmod +x /wait

이러한 샘플 Dockerfile의 전체 예제 (프로젝트 리포지토리 README 에서 다시 ) :

FROM alpine

## Add your application to the docker image
ADD MySuperApp.sh /MySuperApp.sh

## Add the wait script to the image
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.5.0/wait /wait
RUN chmod +x /wait

## Launch the wait tool and then your application
CMD /wait && /MySuperApp.sh

가능한 사용법에 대한 자세한 내용은 README를 참조하십시오.


나는 비슷한 대답을 찾고있었습니다. 나는 일반적으로 아래에서 netcat을 사용하기 때문에 hub.docker.com/r/dadarek/wait-for-dependencies 와 함께 일했습니다 . 귀하가 제공 한 것은 녹 기반입니다. 당신의 품질에 대해 언급 할 수는 없지만 추가 레이어는 확실한 전문가가 아닙니다.
Filip Malczak 2016 년

1
보안상의 이유로 이것을 반대하는 것이 좋습니다. 하이퍼 링크에서 임의의 실행 파일을 실행 중입니다. 더 나은 솔루션은 COPY를 사용하여 이미지에 복사 된 정적 스크립트를 사용하여 동일한 작업을 수행하는 것입니다.
Paul K

@PaulK는 물론 하이퍼 링크에서 무엇을 실행하는 것이 안전하지 않다는 것을 이해할 수는 있지만 https://github.com/ufoscout/docker-compose-wait라이브러리를 작동 시키는 방법에 대한 데모 일뿐 입니다.) 라이브러리를 사용하는 방법은 일부 라이브러리를 사용할 수있는 대답을 변경하지 않습니다. 보안은 복잡한 주제이며, 만약 우리가 멀리 나아가면, 우리는 그것을 복사하더라도 어쨌든 그 라이브러리가 무엇을하고 있는지 확인해야합니다. :) : "나는 그 라이브러리의 사용에 반대하는 것이 좋습니다. 하이퍼 링크에서 " 힌트를 주셔서 감사합니다.
Evereq

2

이 블로그 게시물을 기준으로 https://8thlight.com/blog/dariusz-pasciak/2016/10/17/docker-compose-wait-for-dependencies.html

docker-compose.yml아래와 같이 구성했습니다 .

version: "3.1"

services:
  rabbitmq:
    image: rabbitmq:3.7.2-management-alpine
    restart: always
    environment:
      RABBITMQ_HIPE_COMPILE: 1
      RABBITMQ_MANAGEMENT: 1
      RABBITMQ_VM_MEMORY_HIGH_WATERMARK: 0.2
      RABBITMQ_DEFAULT_USER: "rabbitmq"
      RABBITMQ_DEFAULT_PASS: "rabbitmq"
    ports:
      - "15672:15672"
      - "5672:5672"
    volumes:
      - data:/var/lib/rabbitmq:rw

  start_dependencies:
    image: alpine:latest
    links:
      - rabbitmq
    command: >
      /bin/sh -c "
        echo Waiting for rabbitmq service start...;
        while ! nc -z rabbitmq 5672;
        do
          sleep 1;
        done;
        echo Connected!;
      "

volumes:
  data: {}

그런 다음 실행 =>을 수행합니다.

docker-compose up start_dependencies

rabbitmq서비스는 데몬 모드에서 시작되고 start_dependencies작업이 완료됩니다.


lol, 플러그인 "curl", "-f", "http://localhost:15672"을 설치 해야하는 쿼리를 만들고 management이미 사용되지 않는 healthcheck를 사용하는 것이 가장 좋습니다. nc-downvote 를 통한 점검으로 간단한 작업 예 . ha, ok ...
이고르 코 마르

대답은 curl, nc 또는 기타 도구를 사용하는 경우 관련이없는 기본 도커 기능을 사용하지 않습니다. 동안! nc는 이미 다른 답변에 게시 된 것과 동일합니다.
svenhornberg


1
@ IgorKomar, 고마워, 당신은 내 하루를 구했다! : 3 실제 응용 프로그램이 시작되기 전에 거의 동일한 메커니즘을 사용하여 mysql 서버가 준비되었는지 확인했습니다. ;) 나는 비슷한 명령을docker-compose run --name app-test --rm "app" bash -l -c 'echo Waiting for mysql service start... && while ! nc -z db-server 3306; do sleep 1; done && echo Connected! && /bin/bash /script/ci_tests.sh'
TooroSan

1

Docker Compose 파일 버전 3에서는 RESTART 를 사용할 수 있습니다. .

예를 들면 다음과 같습니다.

docker-compose.yml

worker:
    build: myapp/.
    volumes:
    - myapp/.:/usr/src/app:ro
    restart: on-failure
    depends_on:
    - rabbitmq
rabbitmq:
    image: rabbitmq:3-management

링크 대신 depend_on 을 사용 했습니다. 후자의 이후 버전 3에서 더 이상 사용되지 않습니다.

작동하더라도 실패 할 때마다 도커 컨테이너를 다시 시작하므로 이상적인 솔루션이 아닐 수 있습니다.

RESTART_POLICY 도 살펴보십시오 . 다시 시작 정책을 미세 조정할 수 있습니다.

프로덕션 에서 Compose사용 하는 경우 실제로 재시작 정책을 사용하는 것이 가장 좋습니다.

restart와 같은 재시작 정책 지정 : 항상 다운 타임을 방지


0

대안 솔루션 중 하나는 Kubernetes와 같은 컨테이너 오케스트레이션 솔루션을 사용하는 것입니다. Kubernetes는 다른 컨테이너를 시작하기 전에 완료 될 때까지 실행되는 init 컨테이너를 지원합니다. API 컨테이너가 init 컨테이너를 사용하여 데이터베이스를 초기화하는 SQL Server 2017 Linux 컨테이너에서 예제를 찾을 수 있습니다.

https://www.handsonarchitect.com/2018/08/understand-kubernetes-object-init.html


0

다음은 main컨테이너 worker가 핑에 대한 응답을 시작할 때 대기 하는 예입니다 .

version: '3'
services:
  main:
    image: bash
    depends_on:
     - worker
    command: bash -c "sleep 2 && until ping -qc1 worker; do sleep 1; done &>/dev/null"
    networks:
      intra:
        ipv4_address: 172.10.0.254
  worker:
    image: bash
    hostname: test01
    command: bash -c "ip route && sleep 10"
    networks:
      intra:
        ipv4_address: 172.10.0.11
networks:
  intra:
    driver: bridge
    ipam:
      config:
      - subnet: 172.10.0.0/24

그러나 올바른 방법은 healthcheck(> = 2.1)을 사용하는 것입니다.


0

심각한 배포에는 권장되지 않지만 기본적으로 "wait x seconds"명령이 있습니다.

함께 docker-compose버전 명령에 추가되었다 . 이는 다음을 수행 할 수 있음을 의미합니다.3.4start_periodhealthcheck

docker-compose.yml:

version: "3.4"
services:
  # your server docker container
  zmq_server:
    build:
      context: ./server_router_router
      dockerfile: Dockerfile

  # container that has to wait
  zmq_client:
    build:
      context: ./client_dealer/
      dockerfile: Dockerfile
    depends_on:
      - zmq_server
    healthcheck:
      test: "sh status.sh"
      start_period: 5s

status.sh:

#!/bin/sh

exit 0

여기서 발생하는 healthcheck것은 5 초 후에 호출됩니다. 이 status.sh스크립트는 항상 "문제 없음"을 반환 하는 스크립트를 호출합니다 . 우리는 방금 만들었다zmq_client컨테이너를 시작하기 전에 5 초 정도 기다렸 !

참고 : 가지고있는 것이 중요합니다 version: "3.4". 이 없으면 .4docker-compose가 불평합니다.


1
순진한 "wait 5s"솔루션으로서 이것은 매우 독창적입니다. 나는 찬성하지만, 이것은 실제로 찌르기 같은 설정에서 작동하지 않기 때문에 누군가가 신중하게 읽는 대신 많은 수의 투표를 볼 것을 두려워합니다. )하지만 나는 "똑똑한 사람"말하고 싶었다
필립 Malczak

추신. 더 복잡한 솔루션의 경우, Evereq의 답변을 참조
필립 Malczak

그건 하지 무엇 start_period않습니다. 이 구성은 상태 점검 실패가 재시 도로 계산되지 않는 유예 기간이 있음을 의미합니다. 일찍 성공하면 건강하다고 간주됩니다. 시작 기간이 지나면 실패는 재시 도로 간주됩니다. 참조 docs.docker.com/engine/reference/builder/#healthcheck
CAPI Etheriel에게

-4

나는 단지 2 개의 작성 파일을 가지고 있으며 하나를 시작하고 나중에 하나를 시작합니다. 내 스크립트는 다음과 같습니다

#!/bin/bash
#before i build my docker files
#when done i start my build docker-compose
docker-compose -f docker-compose.build.yaml up
#now i start other docker-compose which needs the image of the first
docker-compose -f docker-compose.prod.yml up

이것은 좋은 습관으로 간주되지 않습니다. 그러면 하나의 작성 파일에서 여러 개의 Conatiner로 구성된 솔루션을 제공 할 수 없습니다.
juergi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.