[英]Docker Compose for Rails
我正在尝试在docker-compose.yml文件中复制此docker命令
docker run --name rails -d -p 80:3000 -v "$PWD"/app:/www -w /www -ti rails
我的docker-compose.yml文件:
rails:
image: rails
container_name: rails
ports:
- 80:3000
volumes:
- ./app:/wwww
当我在执行docker-compose up -d时 ,创建了容器,但没有分层。
当我在docker docker-compose.yml文件中添加tty:true时 ,容器启动良好,但未挂载我的卷。
如何在docker-compose.yml中完全复制我的docker命令?
有一些方法可以解决您的问题。
解决方案1:如果要在docker-compose.yml中使用rails
映像,则需要像这样设置命令和工作目录
rails:
image: rails
container_name: rails
command: bash -c "bundle install && rails server -b 0.0.0.0"
ports:
- 80:3000
volumes:
- ./app:/www
working_dir: /www
每次您运行docker-compose up
都会从rails映像创建一个新容器。
解决方案2:将docker-compose.yml与Gemfile移至同一目录,并在该目录中创建Dockerfile
,以便提前构建Dockerfile
容器(以避免每次都运行bundle install
)
#Dockerfile
FROM rails:onbuild
出于简化原因,我在这里使用rails:onbuild
(关于rails:onbuild
和rails:<version>
之间的区别,请参阅文档 )。
之后,将docker-compose.yml修改为
rails:
build: .
container_name: rails
ports:
- 80:3000
volumes:
- .:/www
working_dir: /www
运行docker-compose up
,这应该可以工作!
如果您修改Gemfile,则可能还需要在运行docker-compose up
之前通过docker-compose build
重建容器。
感谢您的回答。 它帮助我找到了解决方案。
这实际上是一个体积问题。 我想用目录/ www挂载该卷。 但这是不可能的。 因此,我将默认使用的目录与rails图像一起使用: / usr / src / app
rails:
image: rails
container_name: rails
ports:
- 80:3000
working_dir: /usr/src/app
volumes:
- ./app:/usr/src/app
tty: true
现在我的docker-compose up -d命令可以工作了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.