javascript - 从主机的 Angular 来看,Docker-compose 配置前端与后

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

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

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

最佳答案

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

我能够修改前端配置以使用“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

关于javascript - 从主机的 Angular 来看,Docker-compose 配置前端与后端的 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37444424/

相关文章:

visual-studio - 适用于Windows Beta的Docker +适用于Visual

networking - 无法将Docker容器连接到Weave网络

docker - 装入命名卷时,在什么条件下从容器复制数据?

docker - Docker-compose守护程序模式日志

docker - 可以创建增量检查点 CRIU

elasticsearch - cadvisor, elasticsearch, docker :

docker - 当我尝试连接到 docker 镜像时,主机没有运行

docker - 错误的 docker 标签让守护进程卡住了

ubuntu - ubuntu下无法运行Eclipse Che

docker - 如何使用Docker Swarm和Consul启用更快的容器重新调度?