簡體   English   中英

Docker在mac上的安裝權限與linux

[英]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

這種不一致是預期的嗎?

我打這個: http://turnoff.us/geek/before-devops-after-devops/

是的,這是意料之中的。 Osxfs自動將容器文件所有權映射到主機的所有權,以提供更輕松的開發體驗。 通常,主機卷會將主機的 uid/gid 直接傳遞到容器中而無需任何轉換(除非您使用用戶命名空間,但這通常會增加而不是解決此問題)。 因此,如果該目錄由主機上的 uid 1003 擁有,那么這就是文件在容器中的 uid。

主機卷不可移植,它們取決於主機的 state。 為了便於攜帶,請切換到由 docker 管理的命名卷。 它們在首次創建時包括一個用於解決權限問題的初始化步驟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM