Vincent Foury
Vincent Foury

Reputation: 31

"no such file or directory" when running Docker image

I'm new to Docker and trying to create an image with owncloud 7 on centos 6. I've created a Dockerfile. I've built an image. Everything goes right except that when I run the image :

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

I get the error :

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

If I run the image with /bin/bash

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

then I can run the command

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

and it works.

Here is my Dockerfile content :

# 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"]

Any help would be greatly appreciated

Vincent F.

Upvotes: 1

Views: 4877

Answers (3)

tgnottingham
tgnottingham

Reputation: 389

The issue is that your CMD argument contains shell operations, but you're using the exec-form of CMD instead of the shell-form. The exec-form passes the arguments to one of the exec functions, which will not interpret the shell operations. The shell-form passes the arguments to sh -c.

Replace

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

with

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

or

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

See https://docs.docker.com/reference/builder/#cmd.

Upvotes: 1

Vincent Foury
Vincent Foury

Reputation: 31

After many tests, here is the Dockerfile that works to install ouwncloud (without 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"]

then

docker build -t <myname>/owncloud

then

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

then you should be able to open

http://localhost/owncloud

in your browser

Upvotes: 2

Marcus Hughes
Marcus Hughes

Reputation: 5503

I think this is because you're trying to use && within the Dockerfile CMD instruction.

If you intend to run multiple services within a Docker container, you may want to check Supervisor. It enables you to run multiple daemons within the container. Check the Docker documentation at https://docs.docker.com/articles/using_supervisord/.

Alternatively you could ADD a simple bash script to start the two daemons and then set the CMD to use the bash file you added.

Upvotes: 1

Related Questions