[英]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: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
重建容器。
感謝您的回答。 它幫助我找到了解決方案。
這實際上是一個體積問題。 我想用目錄/ 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.