我有一个正在运行 node.js 应用程序的 docker 容器。从运行容器的系统,我可以执行以下操作...
curl http://<IP address of my docker container>/users ....
... 并且它们得到了预期的 json 响应。现在,我已经在系统上安装了一个 apache web 服务器,我有一些 angular.js,我正尝试与 docker 容器上的 REST API 进行通信。但是,docker 容器当然无法从我网络上的其他主机访问。有没有一种简单的方法来设置某种代理?我对 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
... 并获得了预期结果。但如果我从笔记本电脑或笔记本电脑上的浏览器使用类似“postman”的东西并指向它们,http://vm-red:8080/user
我什么也得不到。我做错了什么?
答案1
您可以轻松地将 Docker 容器中的端口映射到主机端口。例如,假设您的主机 ip 是10.20.30.40
,您可以通过将 api 的端口映射到主机的端口,使 Docker 机器中的 api 在该 ip 中可用80
。现在,如果您已经在主机中托管了某些东西,那么您可以将其映射到其他端口,例如8080
。
通过将 docker 镜像端口映射到80
主机上的端口,你的 api 将可以在 上访问10.20.30.40/user
,但如果你将其映射到不同的端口,如8080
,你的 api 将可以在10.20.30.40:8080/users
可以使用以下简单命令完成此操作:
# 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
你可以阅读更多相关内容这里。