我在使用Docker中的rails项目时遇到了一个奇怪的问题,经过3天的谷歌搜索,我无法找到解决方案。我确实设法在docker特定的论坛上找到了与我的问题类似的几个问题,但它们要么是新的docker还是未解决的。应该注意的是,我对码头工作的理解非常有限,因为这是我的第一个需要它的项目,我也从另一个使用mac而没有问题的开发人员那里继承了这个项目。
问题是由docker"创建的文件。未镜像到主机工作目录。
奇怪的是由docker / rails编辑的文件已经存在立即更新(容器到主机)例如:运行rake db:migrate
已更改schema.rb
文件我手动编辑(这是预期的)。我改变的任何文件都更新(主机到docker / rails)我可以在刷新时立即看到更改。
如果我运行说rails precompile
或generate
命令它说明文件已经创建并且可以在正在运行的项目中看到,而不是Windows项目目录!
我在Windows 8上的虚拟框中使用了docker工具箱,boot2docker(我不能使用docker for windows)。我确保项目所在的目录是共享的,并且在User等中。我以通常的方式启动我的机器和会话:
docker-machine start > env > eval(...etc)
然后
docker-compose up
当项目启动时,我跑了:
docker exec <containerID> rails generate controller <ControllerName> new edit --no-test-framework
(以上摘自指南,未显示错误)
我刷新了windows目录并离开/重新进入了它。什么都没有补充。预先登记资产具有相同的结果。
LOG(第二次在命令上方运行)
identical app/controllers/<<Controller_name>>_controller.rb
route get '<<Controller_name>>/edit'
route get '<<Controller_name>>/new'
invoke erb
exist app/views/<<Controller_name>>
identical app/views/<<Controller_name>>/new.html.erb
identical app/views/<<Controller_name>>/edit.html.erb
invoke helper
identical app/helpers/<<Controller_name>>_helper.rb
invoke assets
invoke coffee
identical app/assets/javascripts/<<Controller_name>>.coffee
invoke scss
identical app/assets/stylesheets/<<Controller_name>>.scss
Running via Spring preloader in process 62
下面是我的撰写文件和docker inspect的部分,我认为这与这个问题有关。仅供参考我的撰写文件位于项目目录中的docker目录中。
多克尔-COMPOSE.yml
version: '2'
services:
my-proj:
command: ["/opt/docker/wait-for-it.sh", "db:5432", "--", "/opt/bin/setup"]
image: rails:latest
volumes:
- ../:/opt
expose:
- 4000
ports:
- 4000:4000
depends_on:
- db
stdin_open: true
tty: true
db:
image: postgres:9.6.1
expose:
- 5432
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=psswd
- POSTGRES_USER=user
- POSTGRES_DB=my_proj_dev
DOCKER INSPECT
"HostConfig": {
"Binds": [
"/c/Users/ME/Docker/my-proj:/opt:rw"
],
...
"Mounts": [
{
"Type": "bind",
"Source": "/c/Users/ME/Docker/my-proj",
"Destination": "/opt",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
...
"Config": {
...
"Image": "rails:latest",
"Volumes": {
"/opt": {}
},
"WorkingDir": "/usr/src/app",
在我的noob智慧中,我感觉它可能与"Propagation": "rprivate"
属性有关?我已经用Google搜索了如何将其转换为rshared
但在docker-compose文件中没有找到任何内容。
一如既往,我们将非常感谢任何帮助或指导。
在撰写此问题时,我发现this one来自另一篇与我的问题略有相似的帖子。