繁体   English   中英

Docker Compose for Rails

[英]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: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重建容器。

感谢您的回答。 它帮助我找到了解决方案。

这实际上是一个体积问题。 我想用目录/ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM