Docker:rails可执行文件没有在$ PATH中find

我正在尝试为Rails创build一个docker文件,它允许容器处理所有的需求,比如Ruby版本。 我有一个Rails项目,其中只有Rails定义(5.0.0.1)的Gemfile和Gemfile.lock。 下面是我的Dockerfile和Compose文件。 除了有一个标准的方法来启动新的项目,我想要cachinggem加快发展。 为此,我觉得我需要将bundle安装到Compose文件中。 但是现在如果我尝试生成Rails应用程序,则会收到在$ PATH中找不到的错误rails可执行文件:

docker-compose run web rails new . --force --database-postgresl --skip-bundle 

我需要做些什么来解决这个问题? 当我正在使用现有的项目schemecachinggem时,将二进制文件添加到PATH似乎解决了这个问题,但不确定是否从头开始处理。

 #ENV HOME=/usr/src/app PATH=/usr/src/app/bin:$PATH 

Dockerfile

 FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN mkdir /docknewdev22C WORKDIR /docknewdev22C ADD Gemfile /docknewdev22C ADD Gemfile.lock /docknewdev22C ENV BUNDLE_PATH /gems #add the app's binaries path to $PATH: ENV HOME=/docknewdev22C PATH=/docknewdev22C/bin:$PATH #RUN bundle install (NOW IN COMPOSE FILE) ADD . /docknewdev22C 

泊坞窗,COMPOSE.yml

 version: '2.1' services: db: image: postgres volumes: - postgres-data:/var/lib/postgresql/data web: build: . #added bash command as server.pid was persisting so multiple runs would complain about existing server. command: bash -c "bundle install && rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" #mount the folder of the project from the local workstation. volumes: - .:/docknewdev22C - gem_cache:/gems ports: - "3000:3000" depends_on: - db volumes: postgres-data: driver: local gem_cache: 

试试这个:

Dockerfile

 FROM ruby:2.3.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN gem install bundler -v 1.11.2 --no-ri --no-rdoc RUN mkdir /src WORKDIR /src COPY Gemfile Gemfile.lock ./ RUN bundle install # Copy the main application. COPY . ./ CMD ./start-dev.sh 

start-dev.sh

 rm /src/tmp/pids/server.pid bundle exec rails s -p 3000 -b '0.0.0.0' 

这样,你不需要在你的泊坞窗的字段“命令”组成,只有当你想重写。 dockerfile的每一行都会创build一个图层,其中一个是关于安装gem RUN bundle install所以如果你不更新行,那么你将每次从caching中创build图像。