【问题标题】:Docker-compose config front-end with back-end's IP from host's perspective从主机的角度来看,Docker-compose 配置前端和后端的 IP
【发布时间】:2016-05-26 08:36:55
【问题描述】:

我想创建一个简单的 docker-compose 设置。我有一个由 nginx 服务的 JS 中实现的静态前端——这是一个容器。我还有一个 API 后端 Web 服务器 - 另一个容器。

我可以使用典型的端口转发单独运行两个容器,并通过docker-machine ip 提供的 IP 从我的主机 (Mac OS X) 访问。问题是前端正确地提供其静态内容,但 javascript 向错误地址发出 API 请求。前端应用程序需要配置后端的地址从主机的角度,因为主机是实际执行 API 调用的机器。

有没有办法将 docker 机器的 IP 地址传递到容器的环境中?或者其他一些可以实现这一点的网络配置。

【问题讨论】:

  • 我浏览器中的 "localhost" 是我的 Mac。 docker-machine 是其他地址上的 linux VM。然后容器在该 VM 中运行,端口转发到 VM,但不转发到 Mac。这是关于它的文档页面:docs.docker.com/engine/installation/mac
  • 你可以通过docker-machine通过SSH设置MAC和VM之间的port-forward。
  • IMO 最好将 nginx 设置为您使用的任何后端的反向代理。这样一来,您的 API URL 就可以保持相对于同一个域。

标签: javascript docker docker-compose


【解决方案1】:

更多的是解决方法而不是实际答案:

我能够修改前端配置以使用“document.location.hostname”代替静态定义的地址。

考虑的选项是在 /etc/hosts 中有一个基于某些脚本(见下文)动态更新的条目,以便 VM 始终可以通过某个静态名称引用,然后将前端配置为使用该名称.这更像是一种 hack,但可能适用于更一般的情况。

if [ ! -z "$DOCKER_HOST" ]; then
    ip=`echo $DOCKER_HOST | grep -o '\d\+\.\d\+\.\d\+\.\d\+'`
    grep -v "$ip" /etc/hosts | grep -v "docker-dev" > tmp_hosts
    echo "$ip docker-dev" >> tmp_hosts
    sudo mv tmp_hosts /etc/hosts
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多