Boot2Docker - 以本地主机身份访问网络服务器

Boot2Docker - Access webserver as localhost

创建了一个作为 Docker 容器的 apache 网络服务器,但想在 windows os 浏览器上作为 localhost 访问它。

我可以使用 boot2docker 私人 IP 地址访问网络服务器,即 192.168.59.103,但想以 localhost 访问网络服务器,即 127.0.0.1。

以下是我的Docker容器设置

运行 Oracle VM 上的 Boot2docker Exposed ports : "EXPOSE 80 443" in docker file

用于创建 Docker 文件的命令:

docker run --net=host --name=webserver1 -v /home/data:/data/www/www.samplewebserber.com -v `password`:/scripts -d folder/serverfolder  /scripts/run.sh

如果要访问本地主机的端口 80 和 443,您需要执行两个操作:

  1. 首先,在创建容器时,必须明确指定端口映射。如果您 运行 docker run 带有 -P 选项,则在 dockerfile 的 EXPOSE 中设置的端口将暴露给 Boot2Docker 环境中的随机端口。如果你想专门映射它,你必须 运行:

    docker run \
      --net=host \
      --name=webserver1 \
      -v /home/data:/data/www/www.samplewebserber.com \
      -v `password`:/scripts \
      -d -p 80:80 -p 443:443 \
      folder/serverfolder  \
      /scripts/run.sh
    
  2. 并且为了将 Boot2Docker 端口映射到您的主机环境,正如 Joe Niland link 所建议的,您必须使用 SSH 隧道进行端口转发:

    boot2docker ssh -L 80:localhost:80

    boot2docker ssh -L 443:localhost:443

如果需要,您可以更改为端口映射。

boot2docker 实际上使用 VirtualBox 在您的 Mac OS 中创建了一个具有 linux 核心的 vm,192.168.59.103 是该 vm 的 ip。

因此您需要为该虚拟机设置端口转发

注意在MacOS中,80端口需要高权限,所以我在这个例子中使用了8080。