Windows上的Docker“无法找到Gemfile”

时间:2016-03-24 11:02:42

标签: ruby-on-rails docker

我正在尝试使用Windows作为主机操作系统来学习Docker,以使用Docker Hub中的Rails图像创建容器。

我创建了一个包含以下内容的Dockerfile和一个空的Gemfile,但是我仍然收到错误“找不到Gemfile”。

Dockerfile

FROM rails:4.2.6

我使用的命令如下(不了解他们实际做了什么):

ju.oliveira@br-54 MINGW64 /d/Juliano/ddoc
$ docker build -t ddoc .
Sending build context to Docker daemon 4.608 kB
Step 1 : FROM rails:4.2.6
 ---> 3fc52e59c752
Step 2 : MAINTAINER Juliano Nunes
 ---> Using cache
 ---> d3ab93260f0f
Successfully built d3ab93260f0f
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.


$ docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app ruby:2.1 bundle install
Unable to find image 'ruby:2.1' locally
2.1: Pulling from library/ruby
fdd5d7827f33: Already exists
a3ed95caeb02: Pull complete
0f35d0fe50cc: Already exists
627b6479c8f7: Already exists
67c44324f4e3: Already exists
1429c50af3b7: Already exists
f4f9e6a0d68b: Pull complete
eada5eb51f5d: Pull complete
19aeb2fc6eae: Pull complete
Digest: sha256:efc655def76e69e7443aa0629846c2dd650a953298134a6f35ec32ecee444688
Status: Downloaded newer image for ruby:2.1
Could not locate Gemfile

所以,我的问题是:

  • 如果Gemfile与Dockerfile位于同一目录中,为什么找不到?
  • 命令docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app ruby:2.1 bundle install做了什么?
  • 如何在我的主机文件系统中设置一个文件夹以同步到容器(我正在尝试使用Windows上的Docker为Rails项目创建开发环境)?

我不知道这是否有任何区别,但我正在通过“Docker Quickstart Terminal”快捷方式执行bash运行此命令。我认为它所做的只是在默认的VM中运行这些命令,虽然我可以创建一个新的(但我不知道我是否应该这样做)。

对于所有这些问题,谢谢你,对不起,但是知道Docker对我来说似乎很困惑。

2 个答案:

答案 0 :(得分:1)

您必须将HOST目录挂载到HOME目录中的某个位置(例如c:/ Users / john / *)

答案 1 :(得分:0)

$PWD将为您提供类似Unix的路径。如果你的shell就像Cygwin,它看起来像/cygdrive/c/Users/...或者有趣的东西。但是,Docker和VirtualBox是一个Windows可执行文件,所以他们期望一个普通的Windows路径。但是,似乎Docker无法接受-v命令行中的Windows路径,因此它将转换为/c/Users/...。其他人可能是对的;由于某种原因,您可能无法访问家外的目录(但我不知道为什么)。要解决您的问题,请在家中创建指向所需路径的交汇点,然后将该路径安装到您的家中。

>mklink /j \users\chloe\workspace\juliano \temp
Junction created for \users\chloe\workspace\juliano <<===>> \temp

>docker run -v /c/Users/Chloe/workspace/juliano:/app IMAGE-NAME ls
007.jpg
...

在你的情况下

mklink /j C:\Users\Juliano\project D:\Juliano\ddoc
docker run -v /c/Users/Juliano/project:/usr/src/app -w /usr/src/app ruby:2.1 bundle install

我不知道--rm做了什么。我假设-w设置了工作目录。 -v设置卷装入并将主机路径映射到容器路径。 ruby:2.1使用Docker标准的Ruby 2.1映像。 bundle install运行Bundler!