【问题标题】:docker-compose can't find gemfile in bundledocker-compose 在包中找不到 gemfile
【发布时间】:2019-07-15 19:28:29
【问题描述】:

我一直试图让这个应用程序运行一段时间。它不会给我任何错误来构建它,并且当我的队友遵循相同的步骤时它可以工作。 但是,当我运行时

docker-compose run app bundle exec rake db:setup

我明白了

Starting joatu-db           ... done
Starting joatu-v2_bundler_1 ... done
/joatu/Gemfile not found

我尝试使用以下方式捆绑它:

docker-compose run app bundle install

我明白了

Starting joatu-v2_bundler_1 ... done 
Starting joatu-db           ... done

[!] There was an error parsing `Gemfile`: No such file or directory @ rb_sysopen - /joatu/Gemfile. Bundler cannot continue.

我运行的是 Windows 10 版本 1809

我在 WSL 上运行它:Ubuntu 18.04

Docker 版本:docker engine 18.09

docker compose 版本:1.24.0 rc-1

docker文件是:

FROM ruby:2.4.5

MAINTAINER Robert JJ Smith <rsmithlal@gmail.com>

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs libssl-dev

RUN mkdir /joatu
WORKDIR /joatu
COPY Gemfile /joatu/Gemfile
COPY Gemfile.lock /joatu/Gemfile.lock

# Use a persistent volume for the gems installed by the bundler
ENV BUNDLE_GEMFILE=/joatu/Gemfile \
  BUNDLE_JOBS=2 \
  BUNDLE_PATH=/bundler \
  GEM_PATH=/bundler \
  GEM_HOME=/bundler

#RUN gem install bundler #tried with it and without it same error
RUN bundle install

COPY . /joatu

docker-compose.yml

version: '2.1'

volumes:
  db-data:

services:
  app:
    container_name: joatu-app
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - $PWD:/joatu
    volumes_from:
      - bundler
    ports:
      - "3000:3000"
    depends_on:
      - db
    links:
      - db
    env_file:
      - './docker/.env.app.conf'
  db:
    container_name: joatu-db
    volumes:
      - db-data:/var/lib/postgresql/data
    image: mdillon/postgis:latest
    ports:
      - 5432:5432
    env_file:
      - './docker/.env.app.conf'
  bundler:
    image: busybox
    volumes:
      - /bundler

我已将 . 更改为 $PWD 并再次尝试“取消屏蔽”,但仍然无效。

我已在 Windows 中的不同文件夹中移动,以查看是否是权限问题。它仍然没有工作。而且,我已经删除了图像并重建它,以确保旧图像不会影响更改。

任何帮助将不胜感激。

原文件app位于https://github.com/joatuapp/joatu-v2

编辑:

我运行了命令

 docker-compose run app ls-la 

并显示该文件夹为空。所以,现在我知道这是一个复制问题,但我仍然不知道如何解决它。

【问题讨论】:

  • 您的应用程序本质上是否在 Docker 之外工作?如果删除所有 volumes: 和额外的 bundler: 容器,映像构建是否有效?
  • 该应用程序在 docker 之外运行,也可以在其他人的计算机上运行。我试图从 docker-compose.yml 和 dockerfile 中删除捆绑器行,但我得到了“服务”应用程序“从“捆绑器”安装卷,这不是服务或容器的名称。”

标签: ruby-on-rails docker redis docker-compose


【解决方案1】:

我知道这是一个老话题,但如果有人遇到这个问题,我发现你需要指定你的文件夹略有不同:

改成

volumes:
  - $PWD:/joatu

这个

volumes:
 - $PWD:/joatu/your-workdir

应该解决问题。

当您定义卷 /joatu 时,您实际上是在访问容器内的路径 /,因此 docker 无法找到 gemfile,因为它位于 /joatu。这可能只是 Window 的事情,因为 docker 可用的所有文档都建议使用 Dockerfile 中定义的相同路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多