Что происходит при использовании ../ с томом docker-compose - PullRequest
0 голосов
/ 26 июня 2018

У меня проблемы с записью файлов из контейнера докера на мой хост-компьютер. Я считаю, что это проблема привилегий и предпочитаю не устанавливать privileged: True. Обходной путь для записи файлов заключается в предварительном ожидании ../ тома в моем docker-compose.yml файле. Например,

version: '3'
services:
    example:
        volumes:
         - ../:/example

Что именно ../ здесь делает? Это берет из привилегий контейнера и "поднимается" каталог на хост-машину? Без ../ я не могу записать файлы на хост-компьютер.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Оператор volumes: ['../:/example'] делает родительский каталог каталога, содержащего docker-compose.yml на хосте (../), видимым внутри контейнера в /example. Привязка к каталогу хоста, подобная этой, плюс некоторые эквивалентные конструкции, использующие именованный том , присоединенный к определенному каталогу хоста, - это only способ, которым контейнер может записать в файловую систему хоста.

0 голосов
/ 27 июня 2018

Команда docker build может получить доступ только к каталогу, в котором она находится, и ниже, но не выше, если вы не укажете каталог более высокого уровня в качестве контекста.

Чтобы запустить сборку Docker из родительского каталога:

docker build -f /home/me myapp/Dockerfile 

То же самое в композиторе:

 #docker-compose.yml
 version: '3.3'    
 services:
   yourservice:
     build:
       context: /home/me
       dockerfile: myapp/Dockerfile

Или с вашим примером:

 version: '3'
 services:
     build: 
        context: /home/me/app
        dockerfile: docker/Dockerfile
     example:
        volumes:
          - /home/me/app:/example

Кроме того, вы должны указать полные пути, а не относительные пути. То есть.

- /home/me/myapp/files/example:/example 

Если у вас есть скрипт, который генерирует Dockerfile по неизвестному пути, вы можете использовать:

CWD=`pwd`; echo $CWD

Для ссылки на текущий рабочий каталог. Оттуда вы можете добавить ..

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

См. Также: Docker: добавление файла из родительского каталога

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