16

我刚开始使用 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"

构建并运行:

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 localhost?我想使用 docker 容器作为 Web 服务器。

4

2 回答 2

23

您必须使用端口转发才能从外部访问您的 docker 容器。

来自Docker 文档

默认情况下,Docker 容器可以与外界建立连接,但外界无法连接到容器。

但是如果你想让容器接受传入的连接,你需要在调用时提供特殊的选项docker run

那么这是什么意思?您必须在主机上指定一个端口(通常是端口 80)并将该端口上的所有连接转发到 docker 容器。由于您在 docker 容器中运行 Apache,您可能还希望将连接转发到 docker 容器上的端口 80。

这最好通过命令的-p选项来完成docker run

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

编辑:最初发布此问题时,Apache Web 服务器没有官方的 docker 容器。现在,存在一个现有版本。

启动和运行 Apache 的最简单方法是使用官方 Docker 容器。您可以使用以下命令启动它:

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

这样,您只需在文件系统上挂载一个文件夹,以便它在 docker 容器中可用,并且您的主机端口如上所述转发到容器端口。

于 2015-01-04T20:00:08.870 回答
12

有一个apache的官方图像。图像文档包含有关如何使用此官方图像作为自定义图像基础的说明。

要了解它是如何完成的,请查看官方图像使用的 Dockerfile:

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

例子

确保root可以访问文件

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

使用官方 docker 镜像托管这些文件

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

文件可在端口 80 上访问。

于 2015-01-04T18:22:42.640 回答