[macos] Docker : 마운트가 거부되었습니다. 경로는… OS X에서 공유되지 않으며 Docker에 알려지지 않았습니다.

이 명령 docker run -v /var/folders/zz/...은 다음 오류를 생성합니다.

docker: Error response from daemon: Mounts denied:
The paths /var/folders/zz/... and /var/folders/zz/...
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.

파일 공유를 열면 / private가 이미 나열되어 있습니다.

내가 추가하려고하면 /var/folder/, 그것은에 해결 /private/var/folders의 / 개인 따라서 또한이 거부되는 부분 집합이다.

요약하면 /var/folders/..OS X 에서 디렉토리 가 하위 디렉토리 로 공유 /private되므로 Docker에 알려야 하는 것처럼 보입니다 . 이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.

실험 /private으로 파일 공유 /private/var/folders에서을 (를) 대체 하고 도커를 다시 시작했지만 결과는 변경되지 않았습니다.

보다 완전한 참조를 위해 이것은이 python 스크립트 를 실행 하는 .sh 스크립트 이며, 차례로 docker 명령을 실행합니다.



답변

Mac 용 Docker 볼륨 마운트는 기본 Docker 시스템과 다르게 작동합니다. 이는 Docker가 Apple의 파일 시스템 샌드 박스 지침을 준수하려고하기 때문입니다.

Docker의 환경 설정에 표시된 것처럼 macOS에서는 특정 경로 만 내 보냅니다.

  • /Users
  • /Volumes
  • /tmp
  • /private

파일 공유 환경 설정 패널

/varmacOS에서는 /private. 다음의 경우에도 마찬가지입니다 /tmp.

$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /var -> private/var

/tmp공유 패널에이 표시되지만 표시 /var되지 않는 이유는 무엇입니까 (둘 다의 일부 임에도 불구하고 /private)? 파일 시스템 네임 스페이스에 대한 Mac 용 Docker 설명서 는 다음을 설명합니다.

기본적으로 파일을 공유 할 수 있습니다 /Users/, /Volumes/, /private/,와 /tmp직접. Docker로 내 보낸 디렉토리 트리를 추가하거나 제거하려면 Docker 환경 설정 고래 메뉴-> 환경 설정-> 파일 공유에서 파일 공유 탭을 사용하십시오. (기본 설정을 참조하십시오.)

-v바인드 마운트에 사용되는 다른 모든 경로 는 Docker 컨테이너를 실행하는 Moby Linux VM에서 제공되므로과 같은 인수 -v /var/run/docker.sock:/var/run/docker.sock가 예상대로 작동해야합니다. macOS 경로가 공유되지 않고 VM에 존재하지 않는 경우 마운트를 바인딩하려는 시도가 VM에서 생성되지 않고 실패합니다. VM에 이미 존재하고 파일을 포함하는 경로는 Docker에 의해 예약되어 있으며 macOS에서 내보낼 수 없습니다.

참고 /var/run특별히 대신 맥 OS에서의 리눅스 VM에서 설치 될 장소로 여기에 언급되어있다.

볼륨 마운트를 요청하면 macOS 파일 시스템 내보내기가 먼저 확인됩니다. 일치하는 항목이 없으면 Docker가 실행중인 Linux VM이 다음에 확인됩니다. 둘 다 요청한 경로가 없으면 마운트가 실패합니다.

귀하의 경우에는 /varmacOS로 내보내지지 않습니다. /varLinux VM에는 있지만 /var/folders그렇지 않습니다. 따라서 경로를 사용할 수 없으며 마운트가 실패합니다.

경로를로 변경하면 /private/varmacOS /private가 마운트를 위해 전체 파일 시스템 트리를 내보내므로 성공 합니다.

좀 더 이식성있게 만들기 위해 현재 실행중인 플랫폼을 테스트하고 macOS 인 경우 마운트 경로 앞에 /private.


답변

AS를 대체 솔루션 :

경로를에서 /private/instance1-data:/home로 변경./instance1-data:/home

* nix 땅에서 Docker .는 현재 디렉토리를 나타냅니다. macOS는 샌드 박싱에 대해 더 까다로워지고 있기 때문에 macOS를위한 실행 가능한 솔루션처럼 보입니다. instance1동일한 디렉토리에 필요한 폴더를 만드십시오 .

이 솔루션의 또 다른 장점은 실행의 필요성 제거한다는 것입니다 docker-compose과를 sudo. 그럼에도 불구하고이 경우에는 아무런 해를 끼치 지 않지만 여전히 장점입니다.


답변

예를 들어 Portainer를 사용하면이 명령이 저에게 효과적입니다.

docker run -d --restart unless-stopped -p 9000:9000 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /var:/data portainer/portainer --no-auth

그러나 전혀 변경하면 -v /var:/data작동하지 않습니다. Docker가 mkdir을 수행하려고하기 때문에 (확실하지 않음) 생각합니다. 따라서 마운트를 시도 -v /var/whatever:/data하면 권한이 충분하지 않아 mkdir이 실패하고 작동하지 않습니다.

저는 2 대의 Mac (High Sierra)을 가지고 있고 둘 다 사용해 보았습니다. 같은 문제입니다. 또한 Docker Beta 채널을 사용해 보았습니다. 나는 Dan Lowe의 대답을 이해한다고 생각합니다. 그것이 저에게 효과가 있다면이 대답을 업데이트하겠습니다.


답변

/var/tmp도커 컨테이너에 마운트하려는 Mac에 디렉토리 를 만든 비슷한 문제가 발생했습니다 .

다음과 같이 파일에 디렉토리 경로를 추가하여 문제를 해결했습니다.

$ cat ~/Library/Group\ Containers/group.com.docker/settings.json
{
  "filesharingDirectories" : [
    "\/Users",
    "\/Volumes",
    "\/private",
    "\/tmp",
    "\/var\/tmp"
  ],
…

이제 /var/tmpDocker-> preference-> resources-> file sharing에서 디렉토리 를 볼 수 있습니다 . 그런 다음 도커를 다시 시작했습니다.

그런 다음 내 장착 문제를 해결했습니다.


답변