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:onbuildrails:<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命令起作用了