dockerfile - 无法连接错误

时间:2014-09-28 17:19:01

标签: mysql linux apache docker zfs

所以这就是我要做的事情:我需要使用docker自动设置一些容器。其中一个是谎言:Debian Squeeze有限的CPU份额和有限的内存(1个cpu共享和512 mb内存),预装了apache2,build-essential,php5,mysql-server-5.5,openssh-server并打开了一些端口( Apache为8000,MySQL为1500)。所以我创建了以下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");
?>

测试与mysql服务器的连接

然后

我将所有这些构建成这样的图像:

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

似乎工作正常,当我在浏览器中访问localhost:8000 / site但是显示“无法连接”时,apache服务器正常工作。我究竟做错了什么? 另一个问题是,容器正在运行,但我无法附加它。我运行此命令

sudo docker attach CONTAINER_ID 

然后没有任何反应,不能从那里做任何其他事情,我做错了什么?

我必须构建更多与此类似的dockerfiles来创建容器。所有这些必须托管在ZFS文件系统上,我必须根据它配置50gb的容器存储库,这是什么意思,我该怎么做是什么?

我很抱歉我的英语,这不是我的母语:( 提前谢谢

1 个答案:

答案 0 :(得分:1)

MySQL问题

PHP代码中的

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

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

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

Docker attach

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

如果您现在通过键入exit退出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

通过按键 Ctrl + p + q 验证您是否可以与它进行交互并分离。你最终回到了docker主机shell。

验证名为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个问题会让社区难以找到能够回答所有问题的单一答案;也许可以考虑为这些人发布一个新问题。

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