我正在學習 Docker 并且有一點困惑,我將非常感謝一些建議。
創建新的 Rails 應用程式時。遵循 Docker 教程Quickstart: Compose & Rails的指導方針。他們的步驟如下。
- 創建 Dockerfile 和入口點
- 創建 Gemfile 并列出 source 和 rails gem。
- 創建一個空的 Gemfile.lock
- 創建 docker-compose.yml 和名稱服務。
- 使用 docker-compose run 生成一個新的 rails 應用程式。
rails 新命令。
docker-compose run --no-deps web rails new . --force -d mysql
這是我的簡單 Dockerfile:
FROM ruby:3.1.1-alpine3.15
RUN apk update -q
RUN apk add bash yarn git build-base nodejs mariadb-dev tzdata
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
COPY package.json /app/package.json
COPY yarn.lock /app/yarn.lock
RUN gem install bundler
RUN gem update bundler
RUN bundle install
COPY entrypoint.sh /usr/bin
RUN chmod x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
這是我的 docker-compose.yml:
version: "3.9"
services:
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
ports:
- "3000:3000"
如您所見,我的 docker-compose.yml 中只列出了一項服務,因為我不想要任何其他服務或容器。
當我使用命令 docker-compose run rails new 時一切正常...它會生成一個新的 rails 應用程式并將檔案保存到我的本地源檔案夾中。所以我可以打開和編輯檔案來開發應用程式。完美的。
但是當我嘗試在不使用 docker-compose.yml 而只使用 Dockerfile 的情況下生成一個新的 Rails 應用程式時。生成的檔案不會保留在我的本地源檔案夾中,僅保留在容器中。我只能假設,因為在容器中運行它以生成新的 rails 應用程式之前,我被迫構建影像。
在沒有 docker-compose.yml 的情況下使用。我必須先構建影像。
docker build -t image_name .
然后我可以運行容器并生成 rails 應用程式。
docker run image_name rails new . --force -d mysql
顯然,這不會保留我本地源檔案夾中的新檔案。
如何在沒有 docker compose 的情況下僅使用我的 Dockerfile 生成一個新的 Rails 應用程式,并且新生成的檔案仍然保留在我的本地源檔案夾中?
我一定錯過了一些東西,但我做了很多研究,找不到答案。
uj5u.com熱心網友回復:
在 docker-compose.yml 中,您有一個 'volumes' 鍵,如下所示。
volumes:
- .:/app
但是在 CLI 中使用它時,您會錯過傳遞這些卷。
您可以按照下面的代碼傳遞這些卷。
docker run -d --name=rails --volume /your/workdir:/app image_name
如果您想了解有關卷的更多資訊,可以在此處找到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475466.html
