Я нахожусь на машине 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
действительно занимает некоторое время, поскольку он устанавливает стандартные пакеты плюс ваши добавленные зависимости. Это единственный способ?
@ Спасибо Gunter. См. Больше информации, поскольку я уточняю некоторые моменты. –
Если вы делаете это правильно 'pub get' быстро, потому что Docker кэширует его. Вы используете boot2docker или нет? Какую ОС хоста вы используете? –
boot2docker на windows –