2014-07-12 7 views
12

Docker에서 새 컨테이너를 만들고 실행할 수 없습니다. 그러나 동시에 a는 이전에 생성 된 컨테이너를 실행할 수 있습니다.장치 매퍼 오류로 인해 Docker 컨테이너를 실행할 수 없습니다.

나는 같은 것을 할 때 :

[[email protected] ~ ] docker run --name=fpm-5.3 debian:jessie 
2014/07/12 07:34:08 Error: Error running DeviceCreate (createSnapDevice) dm_task_run failed 

docker.log 에서 :

2014/07/12 05:57:11 POST /v1.12/containers/create?name=fpm-5.3 
[f56fcb6f] +job create(fpm-5.3) 
Error running DeviceCreate (createSnapDevice) dm_task_run failed 
[f56fcb6f] -job create(fpm-5.3) = ERR (1) 
[error] server.go:1025 Error: Error running DeviceCreate (createSnapDevice) dm_task_run failed 
[error] server.go:90 HTTP Error: statusCode=500 Error running DeviceCreate (createSnapDevice) dm_task_run failed 

위한 dmsetup 상태

docker-8:1-1210426-pool: 0 209715200 thin-pool 352 2510/524288 205173/1638400 - ro discard_passdown queue_if_no_space 

을 그러나 그들은 많이 있습니다 디스크의 여유 공간

위한 dmsetup 정보

Name:    docker-8:1-1210426-pool 
State:    ACTIVE 
Read Ahead:  256 
Tables present: LIVE 
Open count:  1 
Event number:  1 
Major, minor:  252, 0 
Number of targets: 1 

고정 표시기 정보

Containers: 4 
Images: 65 
Storage Driver: devicemapper 
Pool Name: docker-8:1-1210426-pool 
Data file: /var/lib/docker/devicemapper/devicemapper/data 
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata 
Data Space Used: 12823.3 Mb 
Data Space Total: 102400.0 Mb 
Metadata Space Used: 9.9 Mb 
Metadata Space Total: 2048.0 Mb 
Execution Driver: native-0.2 
Kernel Version: 3.14.4 

고정 표시기 버전

Client version: 1.0.0 
Client API version: 1.12 
Go version (client): go1.2.2 
Git commit (client): 63fe64c 
Server version: 1.0.0 
Server API version: 1.12 
Go version (server): go1.2.2 
Git commit (server): 63fe64c 

답변

30

다음

# thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata 
# systemctl start docker.service 
# docker run --name=fpm-5.3 debian:jessie 
+0

감사합니다. 이 시간 동안 나는 AU로 바꿨다. 그러나 실행 후에 thing_check는 모든 것이 좋습니다. Docker Docs에서 저장소 백엔드 및 문제를 전환하는 데 대한 '저장소 정보 페이지'를 만드는 것이 유용 할 것입니다. – loadaverage

+3

이것은 나를 위해 일했습니다. 이것이 일어날 수있는 원인은 무엇입니까? – Banjocat

+0

그레이트 !!!!!! 고맙습니다!! 내 목숨을 구해줘 !!!!! – redstone

5

고정 표시기 파티션이 가득 고정 표시기 경우 : 오류가 다음으로 진행하지가 있다면 당신은

# systemctl stop docker.service 
# thin_check /var/lib/docker/devicemapper/devicemapper/metadata 

... 데비안를 조정해야하므로, 페도라/RHEL 시스템입니다 더 이상 재부팅 후 시작하지 않을 것이다,이 발생했습니다

:이 절차를 수리 할 수 ​​있었다

# thin_check /var/lib/docker/devicemapper/devicemapper/metadata 
examining superblock 
examining devices tree 
    missing devices: [0, -] 
    bad checksum in btree node 
examining mapping tree 
    thin device 72 is missing mappings [137494, 137594] 
    bad checksum in btree node 
    thin device 72 is missing mappings [137721, -] 
    bad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree nodebad checksum in btree node 

# thin_dump -r /var/lib/docker/devicemapper/devicemapper/metadata -o /tmp/metadata.xml 
# thin_restore -i /tmp/metadata.xml -o /var/lib/docker/devicemapper/devicemapper/metadata 
1

나는 동일한 문제가있어서 그것을 고칠 수 없었다. 다음에서 유망한 것을 발견했습니다 : http://grokbase.com/t/gg/docker-user/1563fzdtm7/docker-docker-runs-out-of-space-when-trying-to-create-a-new-image '기본 도커 저장 드라이버는 이미지에 대해 10GB 저장 블록을 할당합니다. overlayfs로 이동하고 완전히 이것을 피하십시오. 도커 디먼을 시작하는 명령에서 "-s overlay"를 추가하십시오.

이 문제가 해결되었습니다.

+0

불행히도 OverlayFS에서 rpm 또는 yum을 사용할 수 없습니다 https://bugzilla.redhat.com/show_bug.cgi?id=1213602 – dukeofgaming

1

나는이 문제를 데비안 8.2와 맞서고 있습니다. grsec으로 4.3.3 커널 (기본값은 3.16)을 실행했기 때문에 다른 문제가있었습니다.

GRSEC 문제 (마운트 & chmod가 거부 됨)에도 불구하고 도커를 실행하고 이미지와 컨테이너를 만들 수있었습니다.

그러면 재부팅하고 도커가 오류를 내뱉습니다. 나는 thin_check를 실행하고 제가 발견 한 것은이 있었다 :

  • 메타 데이터 (고정 표시기 내 얇은 풀 얇은 풀 아니라고 말해 계속해서 이후 지금 얇은 풀을 사용하지 않는 괜찮다고 ...)
  • 데이터가 손상되었습니다.

복구를 시도했지만 thin_restore가 충돌합니다.

나는 깨달았다 : docker daemon ... 작동하지만 systemctl stop docker.service로 멈출 수 없다. (| 그렙 고정 표시기 추신 -elf)

난은/etc/기본/고정 표시기

rm -rf /var/lib/docker 
reboot 
에서 DOCKER_STORAGE_OPTIONS을 변경했다 문제를 해결하기 위해 이 서비스가 중지되지만 데몬이 아직 메모리에 말한다

부팅 할 때 서비스가 시작됩니다. 도커 정보

정보를 예상대로 표시합니다. 이미지를 작성했습니다. 재부팅하면 서비스가 다시 시작됩니다. 나는 기본적으로 고정 표시기 데몬이 중지 할 수 있다고 생각하고 그것을 죽이는 :

kill <pid> 

는 데이터 파일이 손상 될 수 있으므로 체크섬이 일치하지 않습니다 원인.

하단에는 docker.service와 docker 데몬이 섞이지 않아야합니다. 적어도 데비안/우분투에서.

+0

Jessie의 일부 ** devops 테스트 케이스에서 docker가 "불안정"할 수 있음을 확인할 수 있습니다. 하지만 지금은 시스템 및 데비안 문제입니다. 최신 Docker 및 aufs (4.4.0-r1 커널)에서 모든 것이 매력적으로 작동합니다 (주로 amazon linux, Debian and Gentoo). 그래서 나는 여러분이 aufs로 전환 할 것을 제안 할 것입니다, 그것은 dm보다 훨씬 안정적입니다. 어쨌든 여러분은 단지 들여다 볼 수 있습니다. – loadaverage

+0

GRSEC을 실행해야하고 aufs 패치가 GRSEC 패치를 좋아하지 않으므로 불행히도 나는 aufs로 전환 할 수 없습니다. 나는 성공적으로 가상 풀로 전환했지만 풀이 손상되어 udev가 더 이상 마운트 할 수 없기 때문에 더 나쁩니다. 재부팅하기 전에 컨테이너를 멈추더라도 풀은 여전히 ​​망가져 버립니다. –

+0

그래서 GRSEC이 여기에 몇 가지 문제를 일으키는 것으로 보입니다. Docker가 DMZ 또는이 같은 것을 실행하는 곳에 기계를 놓는 것일까 요? 내 경험에 의하면 Docker는 커널에 매우 민감하여 플래그 및 특히 패치를 빌드합니다. – loadaverage

1

우리의 경우에는 서비스를 시작하고 중지해야합니다.