大家好,我只想知道让dockerized微服务可用于公众消费的首选过程或做法是什么?我有两个正在docker容器中运行的微服务,我希望它们被一个外部javascript客户端代码。自然,将无法从客户端javascript代码访问docker容器的ip,因此如何使用服务。
我知道它非常愚蠢,但是我刚刚开始探索docker,这件事让我很想念。
答案 0 :(得分:0)
我认为您错过的只是How to publish or expose port
,请参见official guide:
是的,外部设备不知道容器的ip,但是它知道存储您容器的主机的ip,因此您可以让客户端应用程序访问主机的ip,然后路由到容器。
接下来的一个示例中,您可以看到是否不使用-p
,尽管容器打开了端口8000,但客户端无法使用主机的ip访问它。但是,如果启用-p 8000:8000
,则客户端可以使用主机的ip(这里是10.192.244.188
和主机端口8000
来访问它,流量将路由到容器的内部端口8000
,因此外部人员可以成功访问容器的服务。
$ docker run -d python:3 python -u -m http.server
$ curl http://10.192.244.188:8000
curl: (7) Failed to connect to 10.192.244.188 port 8000: Connection refused
$ docker run -d -p 8000:8000 python:3 python -u -m http.server
$ curl http://10.192.244.188:8000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr>
<ul>
<li><a href=".dockerenv">.dockerenv</a></li>
<li><a href="bin/">bin/</a></li>
<li><a href="boot/">boot/</a></li>
<li><a href="dev/">dev/</a></li>
<li><a href="etc/">etc/</a></li>
<li><a href="home/">home/</a></li>
<li><a href="lib/">lib/</a></li>
<li><a href="lib64/">lib64/</a></li>
<li><a href="media/">media/</a></li>
<li><a href="mnt/">mnt/</a></li>
<li><a href="opt/">opt/</a></li>
<li><a href="proc/">proc/</a></li>
<li><a href="root/">root/</a></li>
<li><a href="run/">run/</a></li>
<li><a href="sbin/">sbin/</a></li>
<li><a href="srv/">srv/</a></li>
<li><a href="sys/">sys/</a></li>
<li><a href="tmp/">tmp/</a></li>
<li><a href="usr/">usr/</a></li>
<li><a href="var/">var/</a></li>
</ul>
<hr>
</body>
</html>