我想创建一个简单的 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守护程序模式日志
elasticsearch - cadvisor, elasticsearch, docker :
docker - 当我尝试连接到 docker 镜像时,主机没有运行
docker - 错误的 docker 标签让守护进程卡住了