Как на самом деле привязать монтирование файла в Docker для Windows

Я пытаюсь обновить конфигурацию sebp / elk Logstash после документацию здесь. Я столкнулся с ситуацией, когда файл хоста, который я пытаюсь смонтировать, монтируется как каталог в контейнере.

Я нашел этот связанный вопрос Как смонтировать отдельный файл в томе, но идея работы с PWD не работала для меня в Windows, так как я получил следующую ошибку: C:\Program Files\Docker\Docker\Resources\bin\docker.exe: invalid reference format

Я запускаю Docker в Windows 10 (сборка 16299.192)

λ docker version
Client:
 Version:      17.09.1-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:22:26 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.09.1-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:28:28 2017
 OS/Arch:      linux/amd64
 Experimental: true

Моя команда запуска Docker:

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it -v d:/docker/elk/logstash-snmp.conf:/etc/logstash/conf.d/logstash-snmp.conf --rm --name elk sebp/elk

Мне удалось запустить другие контейнеры с постоянным хранилищем с этого диска (SQL Server, Redis, Exist-DB), но я не уверен, что мне что-то не хватает. Как я могу сказать Docker, что нужно монтировать его как файл, а не как каталог.


person swasheck    schedule 08.01.2018    source источник
comment
Просто создайте папку для logstash и смонтируйте ее в _1 _... Logstash на самом деле ожидает папки со всеми конфигурациями   -  person OneCricketeer    schedule 09.01.2018
comment
Также PWD должен работать в PowerShell. stackoverflow.com/questions/41485217/   -  person OneCricketeer    schedule 09.01.2018


Ответы (2)


Это работает для меня:

Примечание. Этот подход касается W10 Home Edition с Docker Toolbox и VirtualBox.

Обзор: создайте папку на локальном компьютере, смонтируйте ее как общую папку в виртуальной машине Docker, используйте эту общую папку в качестве привязки к контейнеру Docker.

  1. Остановить виртуальную машину докеров с помощью docker-machine stop default
  2. Откройте VirtualBox, найдите default перейдите к Settings > Shared Folder
  3. Вы увидите, что c/Users привязан к вашему c:\Users
  4. Добавьте новую общую папку, обратите внимание на присвоенное ей имя. Назовем его [local-shared]
  5. Выход Settings
  6. docker-machine start default
  7. После запуска docker-machine ssh default
  8. sudo vi /mnt/sda1/var/lib/boot2docker/profile
  9. Добавьте следующее:

      # create a directory in VM
      mkdir /home/docker/[foldername]
      # mount/map shared folder on localmachine to directory
      sudo moun -t vboxsf -o uid=1000,gid=50 [local-shared] /home/docker/[foldername] 
    
  10. Сохраните и выйдите из ssh.

  11. docker-machine stop default
  12. docker-machine start default (или, возможно, docker-machine restart default)
  13. сейчас docker container run -d -p 1234:6789 -v /[local-shared]/sub-dir:/[container-dir] dockerImage2Run

И это должно работать.

Ссылка: http://support.divio.com/local-development/docker/how-to-use-a-directory-outside-cusers-with-docker-toolbox-on-windowsdocker-for-windows

person Bryan Jyh Herng Chong    schedule 28.04.2018
comment
Хорошие шаги. Шаг 13 требует исправления. Вместо [local-shared] он должен быть / home / docker / [foldername] - person ndas; 24.11.2019

Если вы находитесь в окнах, возникла проблема с отображением путей. Я использую терминал Git bash в Windows, и команда, которая у меня работает, находится в этом формате.

  1. Чтобы скопировать файл с именем runtime_config.yml с хоста в контейнер. Путь к хосту задается относительным путем с использованием PWD, как показано ниже. И путь к контейнеру от корня.
docker run -d -p 5000:5000 -v "/${PWD}/etc/runtime_config.yml":/demand_forecast/etc/runtime_config.yml ....
  1. Чтобы скопировать каталог с именем etc с хоста в контейнер. Путь к хосту задается относительным путем с использованием PWD, как показано ниже. И путь к контейнеру от корня.
docker run -d -p 5000:5000 -v "/${PWD}/etc/":/demand_forecast/etc/ ....

Обратите внимание на / в начале пути к хосту, это очень важно, иначе вы столкнетесь с ошибками.

person Ninja_coder    schedule 24.11.2020