
저는 Ubuntu 16.04에서 Docker CE를 사용하고 있으며 ZFS를 Docker용 스토리지로 사용하고 있습니다. 설정은 거의 표준입니다.
- 여러 개의 디스크가 있는 zpool이 있습니다.
- zpool에는 mountpoint가 있는 zfs 파일 시스템이 있습니다
/var/lib/docker
. - 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에 상주하는 컨테이너에 폴더를 매핑했기 때문에 이것은 나에게 적용되지 않았습니다.
이 문제를 해결하기 위해 다음이 작동했습니다.
- sudo systemctl docker.service 편집
다음 내용을 추가합니다.
After=zfs-mount.service Requires=zfs-mount.service Wants=zfs-mount.service BindsTo=zfs-mount.service
대답여기, 각 줄의 기능에 대한 설명이 포함되어 있습니다.