답변:
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
systemctl start docker-compose-app
와 systemctl status docker-compose-app
내가 생각하는 당신이 찾고있는 무슨이다.
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
service docker-compose-app start
, 상태 service docker-compose-app status
, 중지service docker-compose-app stop
다음을 추가 할 수 있어야합니다.
restart: always
docker-compose.yml 파일에서 다시 시작하려는 모든 서비스에
restart: always
몇 가지 심각한 버그가 있습니다. 예를 들어 재부팅시 호스트 마운트가 연결되지 않습니다. 제 생각에는 기존의 바퀴가 정사각형이라면 바퀴를 재발 명하는 것이 좋습니다.
docker.service
시스템 시작시 활성화 된 경우
$ sudo systemctl enable docker
당신의 서비스 docker-compose.yml
는
restart: always
아래 명령을 한 번만 실행하면 시스템을 재부팅하면 모든 서비스가 실행됩니다.
docker-compose up -d
시도했지만 restart: always
일부 컨테이너 (예 : php-fpm)에서 작동하지만 일부 컨테이너 (예 : nginx)가 재부팅 후 여전히 다시 시작되지 않는 문제에 직면했습니다.
문제를 해결했습니다.
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
다시 시작 사용 : 항상 도커 작성 파일에서.
Docker-compose up -d
이미지에서 컨테이너를 다시 시작합니다. docker-compose start
중지 된 컨테이너를 시작하는 데 사용 하며 이미지에서 새 컨테이너를 시작하지 않습니다.
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
또한 Docker 파일에 코드를 작성하여 다른 컨테이너의 종속성이있는 경우 먼저 생성되도록 할 수 있습니다.
user39544
의 답변에 추가로 crontab -e
다음에 대한 구문 유형이 하나 더 있습니다 .
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
crontab -e
... 파이로, 사용자 파이로 그룹 고정 표시기의 구성원
--restart always
하거나--restart unless-stopped
또는 고정 표시기 - compose.yml 사용restart: always
-> 참조 . 그러나 일부 컨테이너에서는 작동하지 않을 수 있습니다!