시스템 시작시 docker-compose up -d를 실행하는 방법은 무엇입니까?


114

컨테이너가 시작 지점에서 자동 시작되도록하기 위해 다음 명령을 추가하려고했습니다.

cd directory_has_docker-compose.yml && docker-compose up -d /etc/rc.local.

하지만 컴퓨터를 재부팅하면 컨테이너가 작동하지 않습니다.

docker-compose up -d시스템 시작시 어떻게 실행 합니까?


3
사용 --restart always하거나 --restart unless-stopped또는 고정 표시기 - compose.yml 사용 restart: always-> 참조 . 그러나 일부 컨테이너에서는 작동하지 않을 수 있습니다!
Benyamin Jafari

답변:


131

crontab또는 더 이상 사용되지 않는 /etc/rc.local파일 을 사용할 때 sleep 10시스템 서비스를 사용할 수 있도록 지연 (예 : 시스템에 따라 다름)이 필요합니다. 일반적으로 systemd(또는 upstart)은 시스템이 부팅 될 때 시작되는 서비스를 관리하는 데 사용됩니다. 이와 유사한 구성을 사용해 볼 수 있습니다.

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

또는 -d플래그 없이 실행하려는 경우 :

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

WorkingDirectory고정 된 프로젝트 경로로 매개 변수를 변경합니다 . 서비스가 자동으로 시작되도록 설정합니다.

systemctl enable docker-compose-app

라즈베리를 다시 시작하지 않고 작동하는지 테스트하는 간단한 방법이 있습니까?
dmigo

2
이것은 가장 우아한 대답입니다 IMO
kuzyn

2
@dmigo systemctl start docker-compose-appsystemctl status docker-compose-app내가 생각하는 당신이 찾고있는 무슨이다.
HectorJ

내가 실행하면 나를 위해 일하지 systemctl start docker-compose-app:이 함께 발생Job for docker-compose-app.service failed because the control process exited with error code. See "systemctl status docker-compose-app.service" and "journalctl -xe" for details
Benyamin Jafari

1
@dmigo : 서비스 시작 테스트 : service docker-compose-app start, 상태 service docker-compose-app status, 중지service docker-compose-app stop
BarryPye

96

다음을 추가 할 수 있어야합니다.

restart: always 

docker-compose.yml 파일에서 다시 시작하려는 모든 서비스에


6
재부팅이 발생할 때 실행 중이어야하므로 재부팅하기 전에 수동으로 중지하지 마십시오.
Tom

Nginx와 같은 일부 서비스는이 옵션으로도 시작되지 않습니다.
Benyamin Jafari

15
이것은 질문에 대한 올바른 대답입니다. 컨테이너를 다시 시작하기위한 설계된 방법이 있습니다. 왜 크론 작업에 들어가야하며 다른 방법으로 바퀴를 재발 명해야합니다.
Taha Rehman Siddiqui

이것이 정답입니다. cron 대신 Kubernetes를 사용하기 시작하면 사용하는 것에 만족할 것입니다.
pferrel

9
@TahaRehmanSiddiqui restart: always몇 가지 심각한 버그가 있습니다. 예를 들어 재부팅시 호스트 마운트가 연결되지 않습니다. 제 생각에는 기존의 바퀴가 정사각형이라면 바퀴를 재발 명하는 것이 좋습니다.
okdewit

73

docker.service시스템 시작시 활성화 된 경우

$ sudo systemctl enable docker

당신의 서비스 docker-compose.yml

restart: always

아래 명령을 한 번만 실행하면 시스템을 재부팅하면 모든 서비스가 실행됩니다.

docker-compose up -d

2
이것은 가장 우아한 솔루션이어야합니다
Carl Cheung

34

시도했지만 restart: always일부 컨테이너 (예 : php-fpm)에서 작동하지만 일부 컨테이너 (예 : nginx)가 재부팅 후 여전히 다시 시작되지 않는 문제에 직면했습니다.

문제를 해결했습니다.

crontab -e

@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&

2
이 답변에 대해 반대 투표를하는 이유는 무엇입니까? 답변이 유용하지 않습니까? 어떤 의미에서 잘못입니까? 댓글은 답변자와 다른 사람들에게 무엇이 잘못되었는지 알려주는 데 유용합니다.
Ayushya

5
: 그들이없는 동작 소개 된대로 베어 잠의 suspicuous해야 martinfowler.com/articles/...
giorgiosironi

이 경우 @giorgiosironi sleep은 괜찮습니다. 컨테이너 시작은 어쨌든 비 결정적 동작을 처리 할 수 ​​있어야합니다.
z0r

4
또한 필요하지 않을 수있는 최대 30 초의 지연 시간을 도입합니다.
giorgiosironi

@ z0r 수면이 좋지 않습니다! 절전 모드는 "작동"할 수 있지만 모든 시작 순서는 결정적이어야합니다. Linux 서비스는 종속성을 사용하여 시작하기 전에 네트워크 등을 사용할 수 있는지 확인합니다. 당신도 똑같이해야합니다.
colm.anseo

25

다시 시작 사용 : 항상 도커 작성 파일에서.

Docker-compose up -d이미지에서 컨테이너를 다시 시작합니다. docker-compose start중지 된 컨테이너를 시작하는 데 사용 하며 이미지에서 새 컨테이너를 시작하지 않습니다.

nginx:   
    restart: always   
    image: nginx   
    ports:
      - "80:80"
      - "443:443"   links:
      - other_container:other_container

또한 Docker 파일에 코드를 작성하여 다른 컨테이너의 종속성이있는 경우 먼저 생성되도록 할 수 있습니다.


1
사용하고 싶지 않을 수도 always있지만 아마도 unless-stopped. 다른 옵션은 on-failureno입니다. 이를 다시 시작 정책이라고 합니다.
Paul

5

user39544의 답변에 추가로 crontab -e다음에 대한 구문 유형이 하나 더 있습니다 .

@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d

이것은 2018 년 3 월에 Raspian을 실행하는 RPi3에서 저에게 효과적이었습니다. 나는 도망 crontab -e... 파이로, 사용자 파이로 그룹 고정 표시기의 구성원
스콧 Veirs에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.