Ошибка синхронизации папки с поставщиком Docker на Vagrant

Я пытаюсь автоматизировать создание образа Docker через поставщика докеров в vagrant.

Мой каталог выглядит так:

Dockerfile external .vagrant Vagrantfile

Соответствующие части моего Dockerfile выглядят так:

FROM ubuntu:14.04
MAINTAINER Austin Lopez <[email protected]>

...

RUN sudo mv /tmp/external/{my_file}.tar .
RUN sudo tar xvf {my_file}.tar

Мой Vagrantfile выглядит так:

# -*- mode: ruby -*-                                                                                                                                                                                         
# vi: set ft=ruby :                                                                                                                                                                                          
Vagrant.configure(2) do |config|
  config.vm.synced_folder "./external", "/tmp/external"

  config.ssh.insert_key = false

  config.vm.provider "docker" do |d|
    d.build_dir = "."
    d.force_host_vm = true
  end
end

Когда я запускаю vagrant up --provider=docker, я вижу следующие строки:

==>default: Syncing folders to the host VM...
   default: Rsyncing folder: ./external => /var/lib/docker/docker_143...

В моем файле докера я пытаюсь получить доступ к синхронизированному файлу в каталоге /tmp/external и получаю следующую ошибку:

cannot stat 'tmp/external/{my_file}': no such file or directory.

Как синхронизировать папки с помощью Docker Provider? Я думаю, что Dockerfile запускается до создания Dockerfile, но я не уверен. Я также рассмотрел Docker Volumes как потенциальное решение, но я думаю, что это для монтирования папок внутри виртуальной машины, а не с хост-машины.


person Austin Lopez    schedule 12.05.2015    source источник
comment
У вас есть rsync на вашем хост-компьютере?   -  person ydaetskcoR    schedule 12.05.2015
comment
У меня есть rsync, и я успешно синхронизировал папки, когда не использовал поставщика докеров. Также ошибка возникает во время автоматической сборки докера, которую я запускаю с помощью команды 'vagrant up --provider=docker'.   -  person Austin Lopez    schedule 12.05.2015
comment
О, не удается создать образ докера, потому что ему нужно что-то в синхронизированной папке? Я думаю, что синхронизированная папка доступна для док-контейнера только после его создания, если я что-то не пропустил. В этом случае ссылка в вашем Dockerfile должна относиться к ./external/ вместо /tmp/external/.   -  person ydaetskcoR    schedule 12.05.2015
comment
Замена ссылки на ./external приводит к той же ошибке. Чтобы задать дополнительный вопрос: кто-нибудь, использующий поставщика докеров, успешно ссылался на файл в синхронизированной папке из Dockerfile?   -  person Austin Lopez    schedule 13.05.2015
comment
Можете ли вы также опубликовать свой Dockerfile?   -  person ydaetskcoR    schedule 13.05.2015
comment
Добавил dockerfile выше. Мне кажется немного странным, что папка синхронизируется с виртуальной машиной хоста в это место /var/lib/docker/docker_143... вместо /tmp/external. Почему эта папка синхронизируется с /var/lib/docker, а не напрямую с виртуальной машиной?   -  person Austin Lopez    schedule 14.05.2015


Ответы (1)


Синхронизированная папка доступна для контейнера Docker после создания образа.

До тех пор Vagrant просто создает ваш образ Docker из файла Dockerfile как обычно, поэтому ссылки в вашем файле Docker должны ссылаться на хост, а не пытаться ссылаться на общую папку как на презентатор контейнера.

person ydaetskcoR    schedule 12.05.2015
comment
Это может работать, когда вы запускаете провайдера докеров как виртуальную среду, но в целях совместимости я заставляю загружаться виртуальную машину хоста. В моем случае каталог хоста недоступен. - person Austin Lopez; 13.05.2015