2015-01-04 58 views
15

我剛開始使用泊塢窗和遵循以下教程:https://docs.docker.com/engine/admin/using_supervisord/如何使用docker容器作爲apache服務器?

FROM ubuntu:14.04 
RUN apt-get update && apt-get upgrade 
RUN apt-get install -y openssh-server apache2 supervisor 
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor 
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
EXPOSE 22 80 
CMD ["/usr/bin/supervisord"] 

[supervisord] 
nodaemon=true 

[program:sshd] 
command=/usr/sbin/sshd -D 

[program:apache2] 
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND" 

生成並運行:

sudo docker build -t <yourname>/supervisord . 
sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord 

我的問題是,當搬運工我的服務器上運行IP http://88.xxx.x.xxx/,我如何通過計算機上的瀏覽器訪問docker容器內運行的apache localhost?我想使用碼頭容器作爲Web服務器。

回答

20

訪問你將不得不使用端口轉發能夠從外界訪問泊塢窗容器。

Docker docs

默認情況下Docker容器可以到外面的世界連接,但外界無法連接到容器。

但是,如果您希望容器接受傳入連接,則在調用docker run時需要提供特殊選項。

那麼,這是什麼意思?您必須在主機上指定一個端口(通常爲端口80),並將該端口上的所有連接轉發到碼頭集裝箱。由於您在Docker容器中運行Apache,因此您可能還想將連接轉發到Docker容器上的端口80。

這最好通過命令的-p選項完成。

sudo docker run -p 80:80 -t -i <yourname>/supervisord 

,說-p 80:80命令的一部分意味着你轉發端口80從主機到80端口在容器上。

如果設置正確,您可以使用瀏覽器瀏覽到http://88.x.x.x,並按照預期將連接轉發到容器。

Docker docs徹底地描述了-p選項。有指定標記的幾種方法:

# Maps the provided host_port to the container_port but only 
# binds to the specific external interface 
-p IP:host_port:container_port 

# Maps the provided host_port to the container_port for all 
# external interfaces (all IP:s) 
-p host_port:container_port 

編輯:當這個問題最初發布有針對Apache Web服務器沒有官方泊塢窗容器。現在,存在一個現有版本。

使Apache啓動並運行的最簡單方法是使用official Docker container。所以,這是在泊塢窗容器可用,如上所述你的主機端口轉發到集裝箱港口

$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 

這種方式,您只需裝入你的文件系統上的文件夾:您可以通過使用下面的命令來啓動它。

+0

是否可以通過瀏覽到指定的域名而不是IP地址來訪問此容器中的Apache?我有一個容器運行,我可以通過瀏覽到「http:// 127.0.0.1 /'來訪問,但是我想將它改爲例如'http:// website.localhost /'。 –

+0

它不知道如何工作。另外,我添加了一個Nginx服務器,將來自website.localhost的請求代理到127.0.0.1,然後運行。 –

12

有一張apache的官方圖片。圖像文檔包含有關如何使用此官方圖像作爲自定義圖像的基礎的說明。

要看看它是如何做走在Dockerfile由官方圖片使用偷看:

https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile

確保文件訪問根

sudo chown -R root:root /path/to/html_files 

主機這些使用官方碼頭形象的文件

docker run -d -p 80:80 --name apache -v /path/to/html_files:/usr/local/apache2/htdocs/ httpd:2.4 

文件是在端口80

相關問題