首页 文章

Docker Compose for Rails

提问于
浏览
1

我正在尝试在 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 时,容器已创建,但它没有策略 .

当我将 tty: true 添加到我的docker docker-compose.yml 文件时,容器启动良好但我的卷未安装 .

如何在 docker-compose.yml 中激动地复制我的docker命令?

2 回答

  • 0

    有一些方法可以解决您的问题 .

    Solution 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图像创建一个新容器 .

    Solution 2: 将docker-compose.yml移动到与Gemfile相同的目录,并在该目录中创建 Dockerfile ,以便提前构建一个docker容器(以避免每次都运行 bundle install

    #Dockerfile
    FROM rails:onbuild
    

    为简单起见,我在这里使用 rails:onbuild (关于 rails:onbuildrails:<version> 之间的区别,请参阅documentation) .

    之后,将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 重建容器 .

  • 1

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

    这实际上是一个卷问题 . 我想用目录 /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 命令有效

相关问题