"没有这样的文件或目录"在运行Docker镜像时

时间:2014-10-09 05:19:57

标签: apache build docker

我是Docker的新手,并试图在centos 6上使用owncloud 7创建一个图像。 我创建了一个Dockerfile。我已经建立了一个图像。 一切顺利,除了当我运行图像时:

docker run -i -t -d -p 80:80 vfoury/owncloud7:v3 

我收到错误:

Cannot start container a7efd9be6a225c19089a0f5a5c92f53c4dd1887e8cf26277d3289936e0133c69: 
exec: "/etc/init.d/mysqld start && /etc/init.d/httpd start": 
stat /etc/init.d/mysqld start && /etc/init.d/httpd start: no such file or directory

如果我用/ bin / bash运行图像

docker run -i -t -p 80:80 vfoury/owncloud7:v3 /bin/bash

然后我可以运行命令

/etc/init.d/mysqld start && /etc/init.d/httpd start

它有效。

这是我的Dockerfile内容:

# use the centos6 base image
FROM centos:centos6
MAINTAINER Vincent Foury
RUN yum -y update
# Install SSH server
RUN yum install -y openssh-server
RUN mkdir -p /var/run/sshd
# add epel repository
RUN yum install epel-release -y
# install owncloud 7
RUN yum install owncloud -y
# Expose les ports 22 et 80 pour les rendre accessible depuis l'hote
EXPOSE 22 80 
# Modif owncloud conf to allow any client to access
COPY owncloud.conf /etc/httpd/conf.d/owncloud.conf
# start httpd and mysql
CMD ["/etc/init.d/mysqld start && /etc/init.d/httpd start"]

非常感谢任何帮助

Vincent F。

3 个答案:

答案 0 :(得分:1)

我认为这是因为您尝试在Dockerfile &&指令中使用CMD

如果您打算在Docker容器中运行多个服务,则可能需要检查Supervisor。它使您可以在容器中运行多个守护进程。查看https://docs.docker.com/articles/using_supervisord/上的Docker文档。

或者你可以ADD一个简单的bash脚本启动两个守护进程,然后设置CMD以使用你添加的bash文件。

答案 1 :(得分:1)

问题是您的CMD参数包含shell操作,但您使用的是CMD的exec-form而不是shell-form。 exec-form将参数传递给其中一个exec函数,这些函数不会解释shell操作。 shell-form将参数传递给sh -c

替换

CMD ["/etc/init.d/mysqld start && /etc/init.d/httpd start"]

CMD /etc/init.d/mysqld start && /etc/init.d/httpd start

CMD ["sh", "-c", "/etc/init.d/mysqld start && /etc/init.d/httpd start"]

请参阅https://docs.docker.com/reference/builder/#cmd

答案 2 :(得分:0)

经过多次测试,这里是Dockerfile,用于安装ouwncloud(没有MySQL):

# use the centos6 base image
FROM centos:centos6

RUN yum -y update

# add epel repository
RUN yum install epel-release -y

# install owncloud 7
RUN yum install owncloud -y

EXPOSE 80 

# Modif owncloud conf to allow any client to access
COPY owncloud.conf /etc/httpd/conf.d/owncloud.conf

# start httpd 
CMD ["/usr/sbin/apachectl","-D","FOREGROUND"]

然后

docker build -t <myname>/owncloud

然后

docker run -i -t -p 80:80 -d <myname>/owncloud

然后你应该可以打开

http://localhost/owncloud

在浏览器中