각 컨테이너의 기본 장치 크기를 늘리는 방법은 무엇입니까?

각 컨테이너의 기본 장치 크기를 늘리는 방법은 무엇입니까?

컨테이너를 빌드하는 동안(컨테이너 내부에서 동일한 명령을 실행할 때도 동일한 일이 발생함) "장치에 남은 공간이 없습니다"라는 오류가 발생합니다. df나는 공간이 충분한지 확인 하고 확인했습니다. 내 운영 체제는 Arch Linux이고 출력은 다음과 같습니다 docker info.

[mark@arch stackage-head]$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 123
Server Version: 18.03.0-ce
Storage Driver: devicemapper
 Pool Name: docker-8:3-5898903-pool
 Pool Blocksize: 65.54kB
 Base Device Size: 10.74GB
 Backing Filesystem: xfs
 Udev Sync Supported: true
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 45.27GB
 Data Space Total: 107.4GB
 Data Space Available: 56.87GB
 Metadata Space Used: 36.01MB
 Metadata Space Total: 2.147GB
 Metadata Space Available: 2.111GB
 Thin Pool Minimum Free Space: 10.74GB
 Deferred Removal Enabled: true
 Deferred Deletion Enabled: true
 Deferred Deleted Device Count: 0
 Library Version: 1.02.146 (2017-12-18)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.15.11-1-ARCH
Operating System: Arch Linux
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.58GiB
Name: arch
ID: VKYM:3FM2:MAE7:SZPY:E4CR:6U6K:Z5SG:5A66:NEJT:K4MD:LN57:FBXM
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: mrkkrp
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.
         Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.

해당 옵션을 사용해 보았지만 --storage-opt size=20G다음과 같이 실패했습니다.

[mark@arch stackage-head]$ docker run -it --storage-opt size=20G snoyberg/stackage:nightly bash
docker: Error response from daemon: Failed to grow rootfs:exit status 1:xfs_growfs: /dev/mapper/docker-8:3-5898903-3456c9ee1d5a83fc705125974101c89015562d0cc4c00bc5e1c97bd560dded6a-init is not a mounted XFS filesystem.
See 'docker run --help'.

~에 따르면문서이것은 작동합니다.

Arch Linux 위키를 보았는데 관련 섹션이 있습니다.

/etc/fstab그러나 내가 아는 한 devicemapper컨테이너의 필요에 따라 XFS 파일 시스템을 생성하는 XFS 파일 시스템이 설치되어 있지 않기 때문에 이것이 나에게 어떻게 작동하는지 잘 모르겠습니다 .

컨테이너는 이 "기본 장치 크기"보다 커질 수 없으므로 다양한 방법으로 늘려 보았습니다.

  • docker daemon --storage-opt dm.basesize=20G에 따라이 오래된 게시물. 아아, --storage-opt알 수 없는 징후로 보고되었습니다.

  • --storage-opt dm.basesize=20G에 전달 docker run되었으나 이번에는 dm.basesize알 수 없는 옵션으로 보고되었습니다.

답변1

그러나 XFS 파일 시스템이 /etc/fstab에 마운트되어 있지 않고 내가 이해한 바에 따르면 devicemapper는 컨테이너의 요구에 따라 XFS 파일 시스템을 생성하므로 이것이 나에게 어떤 영향을 미치는지 잘 모르겠습니다.

물론 맞습니다. 하지만 "Docker Info"에서 "Backing Filesystem: xfs"를 볼 수 있습니다. 이는 docker가 "docker-8:3-5898903-pool" 볼륨에서 동적으로 생성된 컨테이너 기본 볼륨으로 xfs를 사용함을 의미합니다.

"--storage-opt size=20G" 옵션이 저에게 효과적이었습니다.

귀하의 docker 예약 스토리지 볼륨에 확장할 공간이 충분하지 않은 것 같습니다.

다음 명령의 결과를 게시하십시오.

  1. LSBLK
  2. 항목 목록
  3. LVS
  4. VG

답변2

비활성화된 모드가 아닌 다른 모드에서 selinux 루프를 사용할 때는 주의하십시오.

SELinux를 모르는 경우 비활성화 모드(이것을 사용) 그리고 docker의 SELinux를 이해하여 올바르게 구성합니다(Docker SELinux 보안 정책).

관련 정보