답변:
sudo systemctl enable docker
트릭을했다.
이것은 조금 오래되었지만 모든 새 서버 에서이 작업을 수행하기 위해 cloud-init를 사용하기 시작했습니다. 모든 서버에 사용하는 저장된 cloud-init 스크립트가 있습니다. 그것의 일부는 다음을 포함합니다 :
#cloud-config
coreos:
units:
- name: "docker.service"
command: "start"
enable: true
이렇게하면 도커 서비스가 활성화되고 처음 부팅 할 때마다 시작됩니다.
이미 설명한 바와 같이 이 의견 에 의해 롭 , 고정 표시기 소켓 활성화됩니다. 즉, 데몬은 호출되지 않으면 시작되지 않습니다. 여기에있는 기존 답변이 작동하지만 CoreOS는 다른 접근법을 권장합니다.
CoreOS 설명서 에 따르면 권장되는 방법 은 자체 앱에 대한 서비스를 생성하고 Docker 서비스가 필요하다는 것입니다.
/etc/systemd/system/myapp.service :
[Unit]
Description=MyApp
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"
[Install]
WantedBy=multi-user.target
대신 해당 서비스가 자동으로 시작되도록하십시오.
$ sudo systemctl enable /etc/systemd/system/myapp.service
$ sudo systemctl start hello.service
사용 사례는 서비스가 시작되면 컨테이너를 최신 버전으로 업데이트하고 고급 예제는 etcd에 서비스를 등록하는 것입니다. 자세한 배경 정보 는 CoreOS 설명서 를 읽으십시오 .
Docker Swarm을 사용하고 있으므로 systemd를 담당 할 특정 앱이 없습니다 ... 부팅을 시작하려면 docker가 필요합니다. 이것이 내가 해결 한 솔루션입니다.
이것을 넣어 /etc/systemd/system/poke-docker.service
:
[Unit]
After=default.target
[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes
[Install]
WantedBy=default.target
그런 다음 systemctl enable poke-docker
시동 순서가 끝날 때마다 부팅 할 때마다 트리거되도록 설정하십시오. 이 docker version
명령은 docker 데몬과 통신하여 소켓을 트리거하고 docker 서비스 자체를 시작합니다.
나는 systemctl enable docker
다른 대답으로 트릭을 시도했지만 처음에는 효과가 있었지만 Docker가 분명히 많은 일을하려고하고 비참하게 실패하는 일종의 천둥 무리 상황을 일으킨 것으로 보입니다. 나는 이것이 의견에 언급 된 "부트 체인 차단"동작이라고 생각합니다.