Ruby on rails Docker compose卷导致错误:未找到或不存在容器命令

Ruby on rails Docker compose卷导致错误:未找到或不存在容器命令,ruby-on-rails,docker,docker-compose,Ruby On Rails,Docker,Docker Compose,我最近继承了一个Rails项目,该项目被配置为在开发中使用Docker运行。这是第一次使用Docker,虽然我觉得它应该很容易,但我无法让它工作 当我尝试运行docker compose up时,输出为: 正在创建项目MyApp_db_1 正在创建projectmyapp\u bundle\u 1 创建项目MyApp\u web\u 1 错误:未找到或不存在容器命令 mydocker compose.yml的内容: db: build: ./docker_db web:

我最近继承了一个Rails项目,该项目被配置为在开发中使用Docker运行。这是第一次使用Docker,虽然我觉得它应该很容易,但我无法让它工作

当我尝试运行docker compose up时,输出为:

正在创建项目MyApp_db_1
正在创建projectmyapp\u bundle\u 1
创建项目MyApp\u web\u 1
错误:未找到或不存在容器命令

my
docker compose.yml的内容:

db:   
  build: ./docker_db  

web:     
  build: .
  command: ./script/start
  volumes:  
    - .:/myapp
  ports:  
    - "3000:3000"
  links:  
    - db
  volumes_from:  
    - bundle  

bundle:
  image: busybox
  volumes:
    - /bundle
在调试期间,我设法将其缩小到web容器的volumes行。如果我注释掉
-。:/myapp
行docker compose up命令,则可以正常完成。我可以通过docker机器的IP地址访问站点,但是为了反映对站点的更改,我必须完全重建容器,我假设将当前目录装载为卷就是为了这个容器

我的主应用程序中Dockerfile的内容:

FROM ruby:2.2.2
RUN apt-get update -qq && apt-get install -y build-essential locales libpq-dev nodejs git postgresql-client-9.4 imagemagick libmagickwand-dev libreadline6 libreadline6-dev graphviz less

RUN echo "ar_SA.UTF-8 UTF-8\nen_GB.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
RUN localedef -i ar_SA -c -f UTF-8 -A /usr/share/locale/locale.alias ar_SA.UTF-8
RUN localedef -i en_GB -c -f UTF-8 -A /usr/share/locale/locale.alias en_GB.UTF-8

ENV LC_ALL en_GB.UTF-8
ENV LANG en_GB.UTF-8
ENV LANGUAGE en_GB.UTF-8

RUN mkdir -p /myapp/config

WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
ADD config/database.yml.docker /myapp/config/database.yml

ENV BUNDLE_PATH /bundle

ADD . /myapp

CMD rails s -b 0.0.0.0
docker--version的结果是:

Docker版本1.10.2,构建c3959b1

我在这里也发现了类似的问题:但不要觉得这是相同的解决方案

任何帮助都将不胜感激——虽然我现在已经了解了Docker的基本知识,但我似乎无法弄清问题的根源


抛出的错误似乎来自Docker源代码中的此处:

命令:./script/start
是要在容器内执行的命令,看起来此脚本在容器内不可用

我建议将应用程序文件和关联的docker文件移动到
web
文件夹,但将
docker compose.yml
文件保留在根目录下。修改后的
docker compose.yml

db:   
  build: ./docker_db  

web:     
  build: ./web
  command: myapp/script/start
  volumes:
    - ./web:/myapp
  ports:  
    - "3000:3000"
  links:  
    - db
  volumes_from:  
    - bundle  

bundle:
  image: busybox
  volumes:
    - /bundle
修改后的Dockerfile将是

FROM ruby:2.2.2
RUN apt-get update -qq && apt-get install -y build-essential locales libpq-dev nodejs git postgresql-client-9.4 imagemagick libmagickwand-dev libreadline6 libreadline6-dev graphviz less

RUN echo "ar_SA.UTF-8 UTF-8\nen_GB.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen
RUN localedef -i ar_SA -c -f UTF-8 -A /usr/share/locale/locale.alias ar_SA.UTF-8
RUN localedef -i en_GB -c -f UTF-8 -A /usr/share/locale/locale.alias en_GB.UTF-8

ENV LC_ALL en_GB.UTF-8
ENV LANG en_GB.UTF-8
ENV LANGUAGE en_GB.UTF-8

WORKDIR /myapp

ENV BUNDLE_PATH /bundle

CMD rails s -b 0.0.0.0
请注意,我删除了所有的
ADD
命令,因为您将从主机装载文件夹。确保在主机上的新web文件夹中有以下文件(将
config/database.yml.docker
文件重命名或复制到
config/database.yml

还有其他应该在这里的文件

使用
chmod+x
使
start
文件可执行


最后,运行
docker compose up

我将命令更改为
/myapp/script/start
,并删除了
添加/myapp
行,但错误保持不变。在做了更改之后,我运行了
docker compose build
docker compose up
还有什么需要运行的吗?您有这个
/script/start
文件吗?内容是什么?如果您可能不删除此命令行。感谢您的回复-我确实这么做了。它的内容很简单:在主机上尝试
chmod+x./script/start
,然后运行docker compose build/up。或者,只需将内容添加到dockerfile中的CMD部分,然后从docker-compose.yml中删除命令行。可能只是等待gems绑定的一些进展。当我了解更多信息时将更新。谢谢你的帮助!
./web/Gemfile
./web/Gemfile.lock
./web/config/database.yml
./web/script/start