[docker] 디렉토리를 파일에 마운트하려고합니까 (또는 그 반대로)?

버전이있는도 커가 있습니다 17.06.0-ce. 도커를 명령과 함께 사용하여 NGINX를 설치하려고 할 때 :

docker run -p 80:80 -p 8080:8080 --name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx:latest

그것은 보여줍니다

docker : 데몬의 오류 응답 : oci 런타임 오류 : container_linux.go : 262 : 컨테이너 프로세스 시작으로 인해 “process_linux.go : 339 : 컨테이너 초기화로 인해 \”rootfs_linux.go : 57 : 마운트 \\ “/ appdata / nginx / conf / 발생 nginx.conf \\ “를 rootfs \\”/ var / lib / docker / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\ “로 \\”/ var / lib / docker / aufs / mnt / dcea06947385aedfax574 / ngfada06947385aedfac114593b18fc8betc. \\ “이 (가) \\”디렉토리가 아닙니다. \\ “\” “발생 : 파일에 디렉토리를 마운트하려고합니까 (또는 그 반대)? 지정된 호스트 경로가 존재하고 예상 유형인지 확인하십시오.

nginx.conf파일을 마운트하지 않으면 모든 것이 정상입니다. 그렇다면 구성 파일을 어떻게 마운트 할 수 있습니까?



답변

Docker는 파일이 아닌 폴더$PWD/conf/nginx.conf 로 인식하기 때문 입니다. 있는지 확인 디렉토리에 포함 된 A와 디렉토리 .$PWD/conf/nginx.conf

테스트

> cat $PWD/conf/nginx.conf
cat: nginx.conf/: Is a directory

그렇지 않으면 Docker 문제를 엽니 다 .
동일한 구성으로 잘 작동합니다.


답변

더 이상 발생하지 않습니다 (v2.2.0.0 이후). 여기를 참조 하세요.


Windows 용 Docker를 사용하는 경우 경우 최근에 비밀번호를 변경 한 경우이 오류가 발생할 수 있습니다.

어떻게 고치는 지:

  1. 먼저 손상된 컨테이너의 볼륨
    docker rm -v <container_name>
    업데이트를 삭제해야합니다. 아래 단계는 먼저 볼륨을 삭제할 필요없이 작동 할 수 있습니다.
  2. Docker 설정 열기
  3. “공유 드라이브”탭으로 이동
  4. 창 하단의 “Reset Credentials …”링크를 클릭하십시오.
  5. Docker와 함께 사용하려는 드라이브를 다시 공유하십시오.
  • 사용자 이름 / 비밀번호를 입력하라는 메시지가 표시됩니다.
  1. “적용”을 클릭하십시오.
  2. “재설정”탭으로 이동
  3. “Docker 다시 시작”을 클릭하십시오.
  4. 컨테이너 / 볼륨 다시 만들기

솔루션에 대한 크레딧은 GitHub의 BaranOrnarli로 이동합니다.


답변

TL; DR : 컨테이너와 관련된 볼륨을 제거합니다.

docker ps -a다음을 사용하여 컨테이너 이름을 찾은 다음 다음을 사용하여 해당 컨테이너를 제거합니다.

docker rm -v <container_name>

문제:

이전 docker run파일을 실행하는 동안 명령 실행을 시도한 경우 직면 한 오류가 발생할 수 있습니다. 이 호스트 디렉토리에 있어야하는 위치에 이없는 .

이 경우 docker 데몬은 그 자리에 컨테이너 내부 에 디렉토리를 만들었을 것 입니다. 나중에 올바른 파일을 호스트 디렉토리에 넣고 docker 명령이 다시 실행되면 적절한 파일에 매핑하지 못합니다.

해결책:

컨테이너와 연관된 볼륨을 제거하십시오. 다른 컨테이너 볼륨에 대해 걱정하지 않는 경우 다음을 사용할 수도 있습니다.

docker volume rm $(docker volume ls -q)


답변

Docker Toolbox를 사용하는 사람들을위한 답변

여기에 문제에 대한 답변이 3 개 이상 있지만 제대로 설명하지 않고 완전한 솔루션을 제공하지 않았습니다. 이것은 단지 폴더 마운트 문제 입니다.

문제에 대한 설명 :

Docker Toolbox는 가상 머신을 생성하여 Docker의 Hyper-V 요구 사항을 우회합니다 (번들 제공되는 VirtualBox에서). Docker는 VM 내부에 설치되고 실행됩니다. Docker가 제대로 작동하려면 호스트 컴퓨터에서에 액세스 할 수 있어야합니다. 여기에는 없습니다.

내가 도커 도구 상자를 설치 한 후에는 버추얼 VM을 생성에만 장착 C:\Users으로, 기계에 \c\Users\. 내 프로젝트는 C:\projects마운트 된 볼륨의 어디에도 없었습니다. VM에 경로를 보낼 때 C:\projects마운트 되지 않았으므로 존재 하지 않습니다. 따라서 위의 오류입니다.

내 ngnix 구성이 포함 된 프로젝트가 있다고 가정 해 보겠습니다. C:/projects/project_name/

수정 :

  1. VirtualBox로 이동하여 기본값 (Docker의 VM)> 설정> 공유 폴더를 마우스 오른쪽 버튼으로 클릭합니다.
    여기에 이미지 설명 입력

  2. 오른쪽에 더하기가있는 작은 아이콘을 클릭하고 새 공유를 추가합니다. 다음 설정을 사용했습니다.

여기에 이미지 설명 입력

  1. 위는 매핑됩니다 C:\projects/projects( ROOT/projects지금은이 같은 프로젝트에 어떤 경로를 참조 할 수 있음을 의미하는 VM에) : /projects/project_name– 때문에project_name 에서 C:\projects\project_name마운트되었습니다.

상대 경로를 사용하려면 경로 이름 지정을 고려하십시오. c/projects 없습니다projects

  1. 모든 것을 다시 시작하면 이제 제대로 작동합니다. VirtualBox에서 가상 머신을 수동으로 중지하고 Docker Toolbox CLI를 다시 시작했습니다.

내 도커 파일에서 이제 nginx.conf 과 같이 .

volumes:
    - /projects/project_name/docker_config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf

nginx.conf가 실제로있는 곳 C:\projects\project_name\docker_config\nginx\nginx.conf


답변

@Ayushya가 제공 한 설명은이 다소 혼란스러운 오류 메시지를 표시 한 이유였으며 필요한 관리 작업은 다음과 같이 쉽게 수행 할 수 있습니다.

$ docker container prune
$ docker volume prune


답변

나는 같은 문제가 있었다. Windows 10 17.09에서 WSL과 함께 Docker Desktop을 사용하고있었습니다.

문제의 원인 :

문제는 Windows 용 Docker가 다음과 일치하는 형식으로 볼륨 경로를 제공 할 것으로 예상한다는 것입니다.

/c/Users/username/app

그러나 WSL은 대신 다음 형식을 사용합니다.

/mnt/c/Users/username/app

콘솔에서 파일을 확인할 때 내가 그것을 보았고 모든 것이 정확했기 때문에 이것은 혼란 스럽습니다. 볼륨 경로 에 대한 Windows 용 Docker의 기대치를 알지 못했습니다 .

문제 해결 방법 :

Windows 용 Docker 및 WSL 차이점을 수정하기 위해 사용자 지정 탑재 지점을 바인딩했습니다.

sudo mount --bind /mnt/c /c

이 놀라운 가이드에서 제안한 것처럼 Windows 및 WSL 용 Docker 가 완벽하게 작동 하도록 설정하면 이제 모든 것이 완벽하게 작동합니다.

WSL을 사용하기 전에 Git Bash를 사용하고 있었는데이 문제도있었습니다.


답변

Windows 용 Docker ToolBox를 사용하고 있습니다. 기본적으로 C 드라이브 는 자동으로 마운트되므로 파일을 마운트하려면 파일과 폴더가 C DRIVE 안에 있는지 확인하십시오 .

예: C:\Users\%USERNAME%\Desktop