Docker 서비스는 ZFS보다 먼저 시작됩니다.

Docker 서비스는 ZFS보다 먼저 시작됩니다.

저는 Ubuntu 16.04에서 Docker CE를 사용하고 있으며 ZFS를 Docker용 스토리지로 사용하고 있습니다. 설정은 거의 표준입니다.

  1. 여러 개의 디스크가 있는 zpool이 있습니다.
  2. zpool에는 mountpoint가 있는 zfs 파일 시스템이 있습니다 /var/lib/docker.
  3. Docker는 파일 시스템이 ZFS임을 확인하고 자동으로 사용합니다.

대부분의 경우 모든 것이 작동합니다. 그러나 가끔씩 VM이 부팅될 때 zpool이 마운트되지 않습니다. 나는 (100% 확실하지는 않지만) 이것이 ZFS 파일 시스템이 마운트되기 전에 Docker 서비스가 시작되고 실제로 /var/lib/docker루트 FS에 생성된 폴더를 볼 수 있기 때문이라고 믿습니다.

모든 ZFS 파일 시스템이 마운트될 때까지 Docker 서비스가 시작되지 않도록 하려면 어떻게 해야 합니까?

답변1

저는 두 가지 일을 함으로써 이 문제를 해결할 수 있었습니다. 하나만 있어도 충분할 수 있습니다.

먼저 {"storage-driver": "zfs"}. /etc/docker/daemon.json​(디스크에 파일이 있는 경우 스토리지 드라이버 키를 추가하세요.)

둘째, 파일에 다음 systemd 단위를 만듭니다 /etc/systemd/system/docker-wait-zfs.service.

[Unit]
Description=Wait for ZFS before starting Docker
RequiredBy=docker.service
Before=docker.service
Requires=zfs.target
After=zfs.target

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

그런 다음 다음을 실행합니다.

systemctl enable docker-wait-zfs.service

답변2

최근 업데이트 이후에는 여기에 대한 답변이 작동하지 않았습니다. 루트 드라이브가 ZFS를 사용하지 않는 한 더 이상 "/etc/docker/daemon.json"에 "{"storage-driver": "zfs"}"를 가질 수 없는 것 같습니다. 나는 단지 ZFS에 상주하는 컨테이너에 폴더를 매핑했기 때문에 이것은 나에게 적용되지 않았습니다.

이 문제를 해결하기 위해 다음이 작동했습니다.

  1. sudo systemctl docker.service 편집
  2. 다음 내용을 추가합니다.

    After=zfs-mount.service Requires=zfs-mount.service Wants=zfs-mount.service BindsTo=zfs-mount.service

대답여기, 각 줄의 기능에 대한 설명이 포함되어 있습니다.

관련 정보