我刚刚开始使用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
我的问题是,当docker在我的服务器上运行IP http://88.xxx.x.xxx/时,如何从计算机上的浏览器访问docker容器内运行的apache localhost?我想使用docker容器作为Web服务器.
By default Docker containers can make connections to the outside world,but the outside world cannot connect to containers.
But if you want containers to accept incoming connections,you will need to provide special options when invoking
docker run
.
那么这是什么意思?您将必须在主机(通常为端口80)上指定端口,并将该端口上的所有连接转发到docker容器.由于您在docker容器中运行Apache,您可能希望将连接转发到docker容器上的端口80.
这最好通过docker运行命令的-p选项完成.
sudo docker run -p 80:80 -t -i
-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服务器没有正式的docker容器.现在,现有版本存在.
获取Apache并运行最简单的方法是使用official Docker container.您可以使用以下命令启动它:
$docker run -p 80:80 -dit --name my-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4