簡體   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