[英]Docker mount permissions on mac vs linux
我試圖使用 docker 運行 elasticsearch。 並希望使用卷來保存數據。 這是我使用的命令。
docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1
這在我的 Mac 上運行良好。 但是當我嘗試在 Travis CI 中運行它時,它因/usr/share/elasticsearch/data/
目錄的權限被拒絕而失敗。
這是我注意到的與 OSX 上 docker 卷的權限與 Linux 的不一致之處
OSX (Docker 版本 19.03.8,構建 afacb8b)
$ ls -l elasticdata/.keepme
-rw-r--r-- 1 nikhil staff 0 Apr 3 13:07 elasticdata/.keepme
$ docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1 namei -l /usr/share/elasticsearch/data/.keepme
f: /usr/share/elasticsearch/data/.keepme
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxrwxr-x elasticsearch root elasticsearch
drwxr-xr-x root root data
-rw-r--r-- root root .keepme <---------------- owned by root!
Ubuntu (Docker 版本 18.06.1-ce,構建 e68fc7a)
$ namei -l elasticdata/.keepme
f: elasticdata/.keepme
drwxrwxr-x nowalekar nowalekar elasticdata
-rw-rw-r-- nowalekar nowalekar .keepme
$ docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1 namei -l /usr/share/elasticsearch/data/.keepme
f: /usr/share/elasticsearch/data/.keepme
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxrwxr-x elasticsearch root elasticsearch
drwxrwxr-x 1013 1013 data
-rw-rw-r-- 1013 1013 .keepme
這種不一致是預期的嗎?
是的,這是意料之中的。 Osxfs自動將容器文件所有權映射到主機的所有權,以提供更輕松的開發體驗。 通常,主機卷會將主機的 uid/gid 直接傳遞到容器中而無需任何轉換(除非您使用用戶命名空間,但這通常會增加而不是解決此問題)。 因此,如果該目錄由主機上的 uid 1003 擁有,那么這就是文件在容器中的 uid。
主機卷不可移植,它們取決於主機的 state。 為了便於攜帶,請切換到由 docker 管理的命名卷。 它們在首次創建時包括一個用於解決權限問題的初始化步驟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.