docker - 如何为 Docker 容器分配主机名?

标签 docker dockerfile docker-machine

我在 Windows 上运行 Docker(不是 native 版本。即通过 docker-machine 在 VM 上运行的版本)。

目前我有这样的访问网站:

192.168.99.100:8080 for website 1

192.168.99.100:8081 for website 2

192.168.99.100:8082 for website 3

出于显而易见的原因,这是一个真正的痛苦。

我希望能够像以前使用 Apache 虚拟主机那样做,我在其中修改了 hosts文件,然后可以输入类似:website1.dev .

如何为 Docker 容器执行此操作?

我的第一个解决方案是简单地将以下内容附加到我的 Windows 机器上的主机文件中,如下所示:
192.168.99.100 docker.dev

然而docker.dev只会转发到192.168.99.100:80 (即网站 1),因为您不能在主机文件中放置端口。

最佳答案

192.168.99.100 是 docker 机器的 IP:要为该 IP 分配名称,您需要修改 Windows hosts file你自己。

并且假设 docker 机器 VM 的 IP 已修复:请参阅 my script at this answer .

要真正重定向到 VM 中正确的 Apache 服务器,您需要另一个容器,它将:

  • 默认监听80端口
  • 分析 url 和代理传递(重定向)到正确的实际 url:port。
    http://website1.dev => redirect to port 8080
    http://website2.dev => redirect to port 8081
    http://website3.dev => redirect to port 8082
    

  • (与 website1.devwebsite2.devwebsite3.dev 都添加到 Windows 主机文件中,具有相同的 url 192.168.99.100)

    例如,检查 traefik

    如其他容器所见,这与容器的主机名不同。

    docker-compose extra-host 确实相当于 docker run --add-host

    但是一个docker-compose can use hostname: directly将主机名固定到容器。
    这应该足以通过名称引用每个容器。

    关于docker - 如何为 Docker 容器分配主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799241/

    相关文章:

    docker - 如何停止 docker 的虚拟机以便安装 VirtualBox?

    email - Gitlab、docker 和 sendmail 端口

    mysql - ubuntu 12.04 进入 docker "service mysql start"

    docker - 对docker-compose.yml中的volumes_from和卷用法感到困惑

    Docker 服务注册到 Consul 但健康检查失败

    dockerd vs docker-containerd vs docker-runc vs docker-containerd-ctr vs docker-containerd-shim

    docker - 如果 docker 使用虚拟机在 mac 上运行那么它比 vagrant 有什么优势?

    linux - 错误 : Service "xxx" uses an undefined network "xxx"

    docker - 在从 Dockerfile 进行 docker 构建期间使用 STDIN

    javascript - 在 NGINX docker 容器中启动前运行 bash 脚本