Docker组合卷导致ERROR:找不到容器命令或不存在容器命令

时间:2016-03-06 17:15:14

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

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

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

  

创建projectmyapp_db_1
  创建projectmyapp_bundle_1
  创建projectmyapp_web_1
  错误:未找到或不存在容器命令。

我的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容器的卷行。如果我注释掉- .:/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 version 1.10.2, build c3959b1

我在这里也发现了类似的问题:Issue with docker compose: container command not found但不要觉得它是同一个解决方案。

任何帮助都会非常感激 - 虽然我现在已经掌握了Docker的基础知识,但我似乎无法解决问题的根源。

抛出的错误似乎来自Docker源代码:https://github.com/docker/docker/blob/df2b74188ec51422e84ec1dbdc58abf08c215019/api/client/run.go#L56

1 个答案:

答案 0 :(得分:1)

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

我建议将应用程序文件和关联的Dockerfile移动到web文件夹,但将docker-compose.yml文件保留为root。修改后的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

./web/Gemfile
./web/Gemfile.lock
./web/config/database.yml
./web/script/start

以及应该在这里的任何其他文件。

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

最后,运行docker-compose up