簡體   English   中英

dockerfile-無法連接錯誤

[英]dockerfile - Unable to connect error

所以這就是我要做的事情:我需要使用docker自動設置一些容器。 其中之一很簡單:Debian Squeeze具有有限的CPU份額和有限的內存(1 cpu份額和512 mb內存),預安裝了apache2,build-essential,php5,mysql-server-5.5,openssh-server,並且打開了一些端口( 8000(對於Apache)和1500(對於MySQL)。 所以我創建了以下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服務器可以正常工作,但顯示“無法連接”。 我究竟做錯了什么? 另一個問題是contaienr正在運行,但是我無法連接它。我運行此命令

sudo docker attach CONTAINER_ID 

然后什么也沒發生,從那里什么也不能做,我在做什么錯?

我必須再構建幾個與此類似的dockerfile才能創建容器。所有這些都必須托管在ZFS文件系統上,並且我必須基於該文件配置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進程的容器

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外殼程序,則外殼程序進程將結束,並且由於該進程正在容器的前台運行,因此該容器將停止。

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 host 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個問題使社區很難提出一個可以回答所有3個問題的答案; 也許考慮為這些問題發布一個新問題。

如果我對您如何運行MySQL或docker attach的意圖的假設是錯誤的,請發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM