Docker撰写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时 ,容器已经创build,但是没有开启。
当我添加tty:true到我的dockerdocker-compose.yml文件,容器启动良好,但我的卷没有安装。
我该如何复制docker -compose.yml中的docker命令?
有一些方法可以解决你的问题。
解决scheme1:如果您想在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图像创build一个新的容器。
解决scheme2:使用 Gemfile将docker-compose.yml移动到同一目录,并在该目录中创buildDockerfile
以预先构build一个Dockerfile
容器(避免每次运行bundle install
)
#Dockerfile FROM rails:onbuild
我使用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
来重build你的容器。
感谢您的回答。 它帮助我find解决scheme。
这实际上是一个数量问题。 我想挂载目录/ www的卷。 但这是不可能的。 所以我使用默认使用的目录: / 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命令起作用了