我是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。
答案 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"]
答案 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
在浏览器中