docker组成卷导致错误:容器命令未find或不存在

我最近inheritance了一个Rails项目,该项目被configuration为在开发中使用Docker运行。 这是第一次使用Docker,虽然我觉得它应该很容易,我不能得到它的工作。

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

创buildprojectmyapp_db_1
创buildprojectmyapp_bundle_1
创buildprojectmyapp_web_1
错误:容器命令未find或不存在。

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 

在debugging期间,我设法缩小到我的Web容器的卷线。 如果我注释掉- .:/myapp行,docker-compose up命令就完成了。 我可以通过docker机器的IP地址访问站点,但是对于要反映的站点的更改,我必须完全重build容器,我假设是将当前目录安装为卷的目的。

我的主要应用程序中的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

我也发现这个类似的问题在这里: Docker compose问题:没有find容器命令,但不觉得它是相同的解决scheme。

任何帮助将非常感激 – 虽然我已经掌握了Docker的基本知识,但是现在我似乎无法深入到问题的底部。

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

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

我build议将应用程序文件和相关的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 

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

使用chmod +x使可执行文件成为可执行文件。

最后,运行docker-compose up