dockerfile – 无法连接错误

所以这是我必须做的:我需要使用docker自动设置一些容器。 其中一个是谎言:Debian Squeeze与有限的CPU份额和有限的内存(1个CPU共享和512 MB内存),预装apache2,build设必不可less的,PHP5,MySQL服务器5.5,openssh服务器和一些端口打开8000为Apache和1500为MySQL)。 所以我创build了以下dockerfile:

FROM debian:squeeze MAINTAINER Name < email : > # Update the repository sources list RUN apt-get update # Install apache, PHP, and supplimentary programs. curl and lynx-cur are for debugging the container. RUN DEBIAN_FRONTEND=noninteractive apt-get -y install apache2 build-essential php5 mysql-server openssh-server libapache2-mod-php5 php5-mysql php5-gd php-pear php-apc php5-curl curl lynx-cur # Enable apache mods. RUN a2enmod php5 RUN a2enmod rewrite # Manually set up the apache environment variables ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid EXPOSE 80 # Copy site into place. ADD www /var/www/site # Update the default apache site with the config we created. ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf # By default, simply start apache. CMD /usr/sbin/apache2ctl -D FOREGROUND #CMD [ "mysqladmin -u root password mysecretpasswordgoeshere"] EXPOSE 3306 

apache-config.conf的内容是这样的:

 <VirtualHost *:80> ServerAdmin me@mydomain.com DocumentRoot /var/www/site <Directory /var/www/site/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

并在www文件夹我把这个代码的PHP文件:

 <?php $connect=mysql_connect("localhost:1500","root","") or die("Unable to Connect"); ?> 

testing连接到mysql服务器

然后

我把这一切都build立在这样的形象之中:

 sudo docker build --rm --tag="tag_name" . 

然后我像这样运行图像

 sudo docker run -c=1 -m="512m" --net=bridge -p 8000:80 -p 1500:3306 -d --name="container_name" tag_name 

它似乎工作,Apache服务器工作时,我访问localhost:8000 /网站在我的浏览器,但显示“无法连接”。 我究竟做错了什么? 还有一个问题是,邮件正在运行,但我不能附加它。我运行这个命令

 sudo docker attach CONTAINER_ID 

然后什么也没有发生,不能做任何其他的从那里,我做错了什么?

我不得不build造几个类似于这个的dockerfiles来创build容器。所有这些都必须托pipe在ZFS文件系统上,我必须在此基础上configuration一个50GB的容器存储库,这是什么意思,我该怎么做?

我很抱歉我的英语,这不是我的母语:(先谢谢你

MySQL的问题

在PHP代码中

 $connect=mysql_connect("localhost:1500","root","") or die("Unable to Connect"); 

localhost是指容器的IP地址。 由于该容器中没有运行MySQL服务器,连接将失败。

在这个要点 ,我已经改变了一点你的例子让容器启动MySQL和Apache(我认为这是你的第一个意图)使用下面的指令: CMD bash -c '(mysqld &); /usr/sbin/apache2ctl -D FOREGROUND' CMD bash -c '(mysqld &); /usr/sbin/apache2ctl -D FOREGROUND'并更改PHP代码以连接到localhost:3306上的MySQL服务器。

docker附加

docker attach命令旨在允许您与当前在容器的前台运行的进程进行交互。 除非这个进程是一个shell,否则它不会在那个容器中提供一个shell。

以这个例子:

启动一个运行shell进程的容器

 docker run -it --rm base bash 

您现在在您的容器中处于交互模式可以在该容器的前台运行shell:

 root@de8f16a13571:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var 

如果您现在通过inputexit退出shell,那么shell进程将结束,因为那是在容器中前台运行的进程,那么该容器将停止。

root@de8f16a13571:/# exit exit $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

现在再次启动一个名为test的新容器,运行bash:

 docker run -it --name test base bash 

validation你可以与它交互,并通过按下Ctrl + p + q键来从中分离 。 您最终回到docker主机shell。

validation名为test的容器仍在运行:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 81f0f1094f4a base:latest "bash" 6 seconds ago Up 5 seconds test

然后,您可以使用docker attach命令附加到容器中的bash程序:

 docker attach test root@81f0f1094f4a:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var 

ZSH

而关于ZSH,我也不知道是什么意思。 还要注意,同时提出3个问题使社区难以想出一个答案来回答所有3个问题。 也许考虑发布一个新的问题。

请评论,如果我关于如何运行MySQL或你的意图是与docker attach假设是错误的。