2015-01-02 2 views
0

Я нахожусь на машине Windows, пытаясь создать Dart-сервер. У меня было успешное создание и изображение с моими файлами с помощью ADD и запуск контейнера. Тем не менее, было больно создавать изображение каждый раз, когда я не тестировал свой код, поэтому я подумал, что лучше смонтировать мои файлы с помощью команды -v, поскольку они находятся в режиме реального времени с моего хост-компьютера во время выполнения.docker -v и symlinks

Проблема заключается в том, что папка пакеты дротика в /bin/packages действительно символическая (если его называют символическая в окнах) и докер или boot2docker или что-то, кажется, не в состоянии пройти мимо него, и я получаю

Protocol error, errno = 71 

Я использовал дротик с GAE, и команда gcloud каким-то образом создала контейнер, достала ваши файлы и реагировала на изменения в ваших файлах хоста. Я не знаю, использовали ли они параметр -v (как я пытаюсь), или у них есть какой-то авто-строитель, который создал новый образ с вашими файлами с помощью ADD, и он запустил его в любом случае, который, казалось, работал.

Подробнее

Я использую эту Dockerfile, что я модифицированную от google/dart

FROM google/dart 

RUN ln -s /usr/lib/dart /usr/lib/dart/bin/dart-sdk 

WORKDIR /app 

# ADD pubspec.* /app/ 
# RUN pub get 
# ADD . /app 
# RUN pub get --offline 

WORKDIR /app/bin 

ENTRYPOINT dart 
CMD server.dart 

Как вы видите, большинство из них комментируется, потому что вместо того, чтобы ADD я хотел бы использование -v. Однако вы можете заметить, что в этом скрипте они делают pub get дважды, и это эффективно создает пакеты внутри контейнера.

Используя -v, он не может связаться с этими пакетами, потому что они находятся за символическими ссылками хозяина. Тем не менее, pub get действительно занимает некоторое время, поскольку он устанавливает стандартные пакеты плюс ваши добавленные зависимости. Это единственный способ?

ответ

2

Насколько я знаю, вам необходимо добавить папку Windows в качестве общей папки в VirtualBox, чтобы смонтировать ее с помощью -v, используя boot2docker.

gcloud не использует -v, он использует эти докерные файлы https://github.com/dart-lang/dart_docker.
См. Также https://www.dartlang.org/server/google-cloud-platform/app-engine/setup.html, https://www.dartlang.org/server/google-cloud-platform/app-engine/run.html
gclould отслеживает исходный каталог изменений и восстанавливает изображение.

+0

@ Спасибо Gunter. См. Больше информации, поскольку я уточняю некоторые моменты. –

+0

Если вы делаете это правильно 'pub get' быстро, потому что Docker кэширует его. Вы используете boot2docker или нет? Какую ОС хоста вы используете? –

+0

boot2docker на windows –

Смежные вопросы