如何使用Docker容器作为Apache服务器?
我刚开始使用docker,并按照以下教程: https : //docs.docker.com/engine/admin/using_supervisord/
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"
构build并运行:
sudo docker build -t <yourname>/supervisord . sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord
我的问题是,当docker在IP http://88.xxx.x.xxx/的服务器上运行时,如何从我的计算机上的浏览器访问Docker容器内运行的Apache本地主机? 我想使用docker容器作为Web服务器。
您将不得不使用端口转发才能从外部访问您的docker集装箱。
从Docker文档 :
默认情况下,Docker容器可以连接到外部世界,但外部世界无法连接到容器。
但是如果你想容器接受传入的连接,你将需要在调用
docker run
时提供特殊的选项。
那么这是什么意思? 您将不得不在主机上指定一个端口(通常是端口80),并将该端口上的所有连接转发到docker容器。 由于您在Docker容器中运行Apache,因此您可能希望将连接转发到Docker容器上的端口80。
这最好通过docker run
命令的-p
选项完成。
sudo docker run -p 80:80 -t -i <yourname>/supervisord
命令的部分-p 80:80
表示将端口80从主机转发到容器上的端口80。
当设置正确时,您可以使用浏览器浏览http://88.xxx ,连接将按照预期转发到容器。
Docker文档完整地描述了-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
编辑:当这个问题最初发布时,没有正式的docker容器的Apache Web服务器。 现在,存在一个现有的版本。
启动并运行Apache的最简单方法是使用官方的Docker容器 。 您可以使用以下命令启动它:
$ docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
这样,您只需在文件系统上安装一个文件夹,以便在Docker容器中可用,并将主机端口转发到容器端口,如上所述。
有一个官方的图像阿帕奇 。 图像文档包含有关如何使用此官方图像作为自定义图像的基础的说明。
要了解它是如何完成的,请查看官方镜像使用的Dockerfile:
https://github.com/docker-library/httpd/blob/master/2.4/Dockerfile
例
确保文件可以被root用户访问
sudo chown -R root:root /path/to/html_files
使用官方的docker镜像托pipe这些文件
docker run -d -p 80:80 --name apache -v /path/to/html_files:/usr/local/apache2/htdocs/ httpd:2.4
文件可以在端口80上访问。