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


108

이 명령 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 명령을 실행합니다.


3
해봤 어 -v /private/var/folders/zz/...?
Dan Lowe

@DanLowe : 코드가 같이 갔기 때문에 나는하지 않았다 WORKING_DIR="$(mktemp -d)및, -v ${WORKING_DIR}. 그러나 그것을 해킹 WORKING_DIR="/private"$(mktemp -d)하면 문제가 해결되는 것 같습니다. 정말 감사합니다 :)
Aayush

나는 내가 몇 분에 도착하면 일을 이유를 설명하는 답변을 게시합니다
댄 로우

다시 한 번 감사드립니다.
Aayush

동일한 오류 메시지가 나타납니다. 내 상황은 디렉토리에 공간이 없습니다. "서버 측"을 "serverSide"로 변경 한 다음 해결했습니다. 누군가를 도울 수 있기를 바랍니다.
andrew54068

답변:


129

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.


4
@ SamuelMéndez 첫 번째입니다. 형식은 mac-path:container-path이며 /privateMac 측에만 존재합니다.
Dan Lowe

2
비슷한 문제가 발생하면 누구든지 해결하도록 도와 줄 수 있습니다 ( "b'Mounts denied : \ r \ n 경로 / etc / localtime \ r \ nis는 OS X에서 공유되지 않으며 Docker에 알려지지 않았습니다. \ r \ n 공유 경로를 구성 할 수 있습니다. Docker- > 환경 설정 ...-> 파일 공유. \ r \ n 자세한 정보는 docs.docker.com/docker-for-mac/osxfs/#namespaces 를 참조하십시오. \ r \ n. ' ") Docker-> 환경 설정 ...-> 파일 공유는 / etc가 Mac OS 용으로 예약되어 있다고 말합니다.
Sandish Kumar HN

1
@DanLowe 응답 주셔서 감사합니다. / private / etc / localtime을 추가하려고하면 "내보내기 경로 / private / etc / localtime이 내보내기 경로 / private와 겹칩니다."라는 메시지가 표시됩니다. "/ etc / localtime"을 추가하는 데 지 쳤지 만 "APIError : 500 Server Error : Internal Server Error ("마운트 소스 경로를 만드는 동안 오류 '/ etc / localtime': mkdir / etc / localtime : 파일이 있습니다. ")라는 새 오류가 발생했습니다. "어떤 아이디어 ??
Sandish Kumar HN


1
@DanLowe 친절한 답변에 감사드립니다. 이해합니다. Mac OS에서 개발할 때 Ubuntu에 배포합니다. docker-compose를 사용하여 볼륨 / etc / localtime. 시스템을 확인하고 다른 경로를 설정할까요? /private/etc/localtimeMac OS 와 마찬가지로 /etc/localtime우분투에서도 마찬가지입니다. Docker-compose.yml에서 시스템 정보를 알려주는 방법은 무엇입니까? 감사합니다!
hzwzw

4

AS를 대체 솔루션 :

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

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

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


2

예를 들어 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의 대답을 이해한다고 생각합니다. 그것이 저에게 효과가 있다면이 대답을 업데이트하겠습니다.


2

/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에서 디렉토리 를 볼 수 있습니다 . 그런 다음 도커를 다시 시작했습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.