我在尝试创建 Dart 服务器的 Windows 机器上。我使用 ADD
的文件成功构建和镜像并运行容器。然而,每次我不想测试我的代码时构建一个镜像是很痛苦的,所以我认为最好用 -v
挂载我的文件。命令,因为它们是在运行时从我的主机实时访问的。
问题是 dart 的包文件夹位于 /bin/packages
真的是一个符号链接(symbolic link)(如果它在 Windows 中称为符号链接(symbolic link))和 docker 或 boot2docker 或任何似乎无法通过它的东西,我得到了
Protocol error, errno = 71
我在 GAE 和
gcloud
中使用过 dart命令以某种方式创建了容器,将文件放入其中并对主机文件中的更改使用react。我不知道他们是否使用了 -v
选项(正如我正在尝试的那样),或者他们有一些自动生成器,使用 ADD
使用您的文件创建新图像并运行它,无论如何这似乎有效。更多信息
我一直在使用我从 google/dart 修改的 Dockerfile
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
它无法访问这些包,因为它们位于主机符号链接(symbolic link)后面。但是,pub get
实际上需要一段时间,因为它安装标准包以及您添加的依赖项。这是唯一的方法吗?
最佳答案
据我所知,您需要将 Windows 文件夹作为共享文件夹添加到 VirtualBox 才能使用 -v
挂载它使用 boot2docker
.gcloud
不使用 -v
,它使用这些 Dockerfile 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.htmlgclould
监视源目录的更改并重建镜像。
关于google-app-engine - docker -v 和符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736831/