我最近继承了一个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
答案 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