Docker разрешения на монтирование на ма c против linux - PullRequest
0 голосов
/ 03 апреля 2020

Я пытался запустить эластичный поиск, используя docker. И хотел сохранить данные с помощью тома. Это была команда, которую я использовал.

docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1

Это нормально работало на моей маме c. Но когда я попытался запустить его в Travis CI, произошел сбой при отказе в разрешении для каталога /usr/share/elasticsearch/data/.

Вот несоответствие, которое я заметил с разрешениями томов docker в OSX против 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/?

1 Ответ

1 голос
/ 03 апреля 2020

Да, это ожидается. Osxfs автоматически сопоставляет владение файлом контейнера с владельцем хоста для упрощения процесса разработки. Обычно том хоста передает uid / gid хоста непосредственно в контейнер без какого-либо перевода (если вы не используете пространства имен пользователя, но это обычно добавляет к этой проблеме, а не решает ее). Таким образом, если каталог принадлежит uid 1003 на хосте, то есть uid, который файл будет иметь в контейнере.

Тома хоста неявно не переносимы, они зависят от состояния хоста. Для переносимости переключитесь на именованные тома, управляемые docker. Они включают в себя шаг инициализации при первом создании, который имеет тенденцию разрешать проблемы с разрешениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...