我如何代理API请求到我的docker集装箱?

我有一个运行node.js应用程序的docker容器。 从系统容器运行我可以做的事情,如…

curl http://<IP address of my docker container>/users .... 

…和他们预期的JSON响应。 现在我已经在我的系统上安装了一个Apache Web服务器我有一些angular.js,我试图通信到泊坞窗容器上的REST API。 但是当然,Docker容器不能从我的networking上的其他主机访问。 有没有简单的方法来设置某种代理? 我有点熟悉HAProxy。 我可以设置HAProxy吗?

更新:

我开始我的docker容器,如下所示:

 [red@vm-red ~]$ sudo docker run -p 3000:8080 -t -i redsimage ... 

从主机vm-red上的命令行我可以执行此curl…

 [red@vm-red ~]$ curl -H "Content-Type: application/json" http://172.17.0.6:3000/user 

…并获得预期的结果。 但是,如果我使用我的笔记本电脑上的“邮递员”或笔记本电脑上的浏览器,并将它们指向http://vm-red:8080/user我什么也得不到。 我究竟做错了什么?

您可以轻松将Docker容器中的端口映射到主机端口。 例如,假设你的主机ip是10.20.30.40 ,你可以通过将api的端口映射到主机的端口80来使你的10.20.30.40机器中的api可用。 现在,如果您已经在主机中托pipe了一些东西,那么您可以将其映射到其他端口,比如8080

通过将Docker镜像端口映射到主机上的端口80 ,您的api将可以在10.20.30.40/user10.20.30.40/user ,但是如果将其映射到不同的端口(如8080 ,则可以在10.20.30.40:8080/users访问api

这可以使用下面的简单命令完成:

 # Maps the container port to a random host port. docker run -d -P yourImage # Maps the host port of 8080 to the container port 80 docker run -d -p "8080:80" yourImage 

你可以在这里阅读更多。