我目前正在通过docker设置Rails样板。当我尝试运行docker build .
时,出现以下错误:
Step 5/8 : COPY Gemfile /app/
COPY failed: stat /var/lib/docker/tmp/docker-builder090950451/Gemfile: no such file or directory
我正在按照documentation中的说明进行操作,但仍无法构建图像。
这是我的Dockerfile
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /app
# Copy the existing Gemfile
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
# Install Gems
RUN bundle install
COPY . /app
我还有以下docker-compose.yml
文件:
version: '3'
services:
db:
image: postgres # To Edit - Default is postgresql.
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- db
我通过运行docker-compose run web rails new app --force --database=postgresql
生成了Rails应用程序,它确实使用其Gemfile生成了Rails应用程序,如下图所示。
但是,在生成rails应用程序并运行docker-compose build
之后,出现以下错误:
db uses an image, skipping
Building web
Step 1/7 : FROM ruby:2.5
---> 55fb4a37704e
Step 2/7 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
---> Using cache
---> afb6f347904c
Step 3/7 : WORKDIR /app
---> Using cache
---> 1fdbd260685d
Step 4/7 : COPY Gemfile /app/Gemfile
ERROR: Service 'web' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder885442968/Gemfile: no such file or directory
答案 0 :(得分:1)
问题是我将容器目录和应用程序目录命名为相同的app
,这导致找不到Gemfile的问题。
我将Dockerfile
更新为:
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /webapp
COPY ./app/Gemfile /webapp/Gemfile
COPY ./app/Gemfile.lock /webapp/Gemfile.lock
RUN cd /webapp && bundle install
ADD . /webapp
,然后在docker-compose.yml中,将volumes
更改为:
volumes:
- .:/webapp
仅当您希望独立使用Rails应用程序并且希望Docker
文件位于Rails应用程序之外时,这才适用。
答案 1 :(得分:0)
您需要删除./dir /
COPY ./Gemfile /webapp/Gemfile
COPY ./Gemfile.lock /webapp/Gemfile.lock
答案 2 :(得分:0)
这里的问题是,如果您有一行: WORKDIR / app ,您已经在polder应用程序中。因此,当您将某些内容复制到docker容器中时,无需编写./app或/ app,因为。表示这已经是一个应用了。而且,如果您编写了这样的东西,它将被复制到WORKDIR内部的新 app 目录中,路径将为 / app / app 。 在您的情况下,Dockerfile应该如下所示:
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /app
# Copy the existing Gemfile
COPY Gemfile Gemfile.lock .
# Install Gems
RUN bundle install
COPY . .
答案 3 :(得分:0)
在 Ubuntu 18.04中运行 Rails 应用程序时,我仍然遇到相同的问题。
我遇到此错误:
错误:服务'app'构建失败:COPY失败:stat / var / lib / docker / tmp / docker-builder805666212 / Gemfile:没有此类文件或目录
问题是我有多个docker-compose.yml
文件,并且我将文件更改为错误的文件,该文件位于目录而不是根目录中。
我要做的就是删除该docker-compose.yml
并在根目录的docker-compose.yml
上进行文件更改。
然后,我在根目录下的docker-compose.yml
文件中运行以下命令:
docker-compose build
一切都恢复正常。
仅此而已。
我希望这会有所帮助
答案 4 :(得分:0)
我有一个名为bundle
的较早的卷,已被另一个docker映像使用。
因此,每当我运行另一个docker映像时,该映像具有不同的工作目录,并且还需要一个bundle
卷,它会抛出与上述类似的错误消息。
要解决此问题,我只需要修剪旧的卷(包括旧的bundle
卷),然后重新运行构建
docker volume prune
docker build .