當我使用docker-compose up
容器退出時,代碼為 10 并說
Could not locate Gemfile or .bundle/ directory
但如果我這樣做docker run web entrypoint.sh
Rails 應用程式似乎啟動時沒有問題。
這種不一致行為的原因可能是什么?
入口點.sh
#!/bin/bash
set -e
if [ -f tmp/pids/server.pid ]; then
rm tmp/pids/server.pid
fi
bundle exec rails s -b 0.0.0.0 -p 8080
來自 docker-compose 檔案的相關部分。
docker-compose.yml
...
web:
build:
context: "./api/"
args:
RUBY_VERSION: '2.7.2'
BUNDLER_VERSION: '2.2.29'
entrypoint: entrypoint.sh
volumes:
- .:/app
tty: true
stdin_open: true
ports:
- "8080:8080"
environment:
- RAILS_ENV=development
depends_on:
- mongodb
...
uj5u.com熱心網友回復:
當您docker run web ...運行時,您正在運行影像中的內容,不多也不少。另一方面,檔案中的volumes:指令用來自主機的任意內容docker-compose.yml替換容器的/app目錄。如果您的 DockerfileRUN bundle install希望將內容放入/app/vendor影像中,請將其volumes:隱藏。
您可以經常通過volumes:從 Compose 設定中洗掉來解決此類問題。由于您正在運行映像中內置的代碼,這也意味著您正在運行與最終將在生產中運行的完全相同的映像和環境,這是在此處使用 Docker 的一大好處。
(您還應該能夠洗掉通常不需要的tty:和stdin_open:選項,entrypoint:以及build: { args: }復制應該在 Dockerfile 中的設定的和 那些特定的 。)
(Compose 檔案建議您在api子目錄外構建 Docker 映像,然后將當前目錄.-api的父目錄 -系結安裝到映像內容上。這可能是您看到的不一致的直接原因。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358382.html
