Windows/Mac下的Docker,如何把Windows的目錄映射到容器裏,有個小坑

Windows/Mac OS X下的docker是運行在一個Linux虛擬機的, 在這個虛擬機裏,運行多個容器。三層啊,真不爽,什麼事兒都是隔山跨水的,如今事兒就來了,容器裏會報錯說找不到被映射過來的文件。docker

拿Windows舉例,有個目錄叫作 C:¥WinTestDir,放了幾個文件,如今運行一個容器例如busybox,試圖把這個目錄映射到容器裏的 /xxx/yyy目錄下,不管以C:¥WinTestDir仍是/c/WindowsDir仍是/WindowsDir都沒有效果。bash

docker run -it -v C:¥WinTestDir:/xxx/yyy busybox
結果會提示說"和:非法字符。

docker run -it -v /WinTestDir:/xxx/yyy busybox
docker run -it -v /c/WinTestDir:/xxx/yyy busybox

結果容器裏的/xxx/yyy目錄下是空的。

這時通常都會意識到,這個冒號左邊的目錄實際上得是那個虛擬機裏存在的目錄才行,那麼哪些目錄被映射到虛擬機裏了呢?Docker的文檔裏寫了,composer

Windows系統:C:¥Users ->  /c/Usersssh

Mac OS X系統:/Users  -> /Userscode

其它的目錄壓根沒被映射進去,跟別提以後往容器裏映射了。文檔

docker-machine ssh default
docker@rethink:~$ ls /c
Users
docker@rethink:~$ ls /c/Users/Administrator
... Documents Downloads ...
docker@rethink:~$ ls /WinTestDir
No such file or directory

總之,除非用VirtualBox修改這個虛擬機的共享目錄設定,不然在虛擬機裏只能看到C:¥Users如下的文件。虛擬機


因此,省事兒的方法就是把WinTestDir挪到C:¥Users下隨便一層目錄,例如it

C:¥Users¥q¥Documents¥WinTestDir,而後就能夠用io

/c/Users/q/Documents/WinTestDir來作映射源目錄了。例如docker-compose

docker run -it -v /c/Users/q/Documents/WinTestDir:/xxx/yyy busybox

/ # ls /xxx/yyy
  ... some files ...

這就OK了。

 

同理,docker-composer所使用的docker-composer.yml文件裏關於目錄映射(volumns)的地方就得當心。例如這裏寫的someHostDir。

test:
  image: busybox
  command: /bin/find /xxx/yyy
  volumes:
    - ./someHostDir:/xxx/yyy

看起來./someHostDir用的是相對目錄,挺優美的樣子,但是若是這個目錄不屬於C:¥Users底下的,例如C:/work,那就實際上沒法映射了。能夠用這個config子命令來看看實際目錄。Windows下就變成了/c/work/someHostDir了,實際在虛擬機裏這個目錄是和Windows機器裏的目錄沒有關聯起來,就是說是空的。

暫時離開了Windows,就用Mac OS X作實驗:

例如當前位於 /private/tmp/docker-compose-test目錄下,結果是這樣

$ docker-compose config

networks: {}
services:
  test:
    command: /bin/find /xxx/yyy
    image: busybox
    network_mode: bridge
    volumes:
    - /private/tmp/docker-compose-test/someHostDir:/xxx/yyy:rw
version: '2.0'
volumes: {}

那麼運行docker-compose up會顯示出/xxx/yyy裏的內容,什麼都沒有。

$ docker-compose up
Recreating dockercomposetest_test_1
Attaching to dockercomposetest_test_1
test_1  | /xxx/yyy
dockercomposetest_test_1 exited with code 0
相關文章
相關標籤/搜索