在Docker中映射Elasticsearch的端口

我想在Docker中启动一个Elasticsearch容器。 默认情况下,我几乎可以看到所有的东西

docker run -d -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.5.1 

现在是我的问题:为什么我们要在我们的主机networking上映射端口? 我了解端口映射,但我没有看到它的巨大优势。

在我看来,我总是会这样做:

 $ docker network create logging 20aa4c7bf2d8289d8cbd485c3e384f9371eed87204625998687c61e4bad27f14 $ docker run -d --name es --net logging docker.elastic.co/elasticsearch/elasticsearch:5.5.1 

并通过使用它的名称(在这种情况下)连接到ES,并在同一networking中部署容器。 我认为我的ES在私人dockernetworking中更安全。

当你需要连接到elasticsearch的容器不在同一个networking中时,我发现端口映射有一个优点。 但是还有其他的好处,或者为什么总是显示端口映射?

所以主机访问更多的是可访问性。 如果您在本地计算机上运行docker,并且只想在该计算机上访问该应用程序,则不需要主机映射。

现在,如果您需要在除docker主机以外的外部计算机上访问此应用程序,则需要执行该端口映射。

 docker run -d -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.5.1 

这将主机端口9200(左侧)映射到泊坞窗(右侧)内的9200。 监听接口为0.0.0.0 ,表示所有接口。 因此,任何人都可以访问这台机器。

如果你想让它更安全,那么你就像下面这样做

 docker run -d -p 127.0.0.1:9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.5.1 

这只会监听本地主机。 所以只有你可以在机器上访问它。 但是如果你需要从其他地方访问它,那么你会使用SSH隧道

 ssh -L 9200:127.0.0.1:9200 <user>@<HOSTIP> 

在那台机器上,你可以在127.0.0.1:9200上访问它

当你使用ufwfirewalld等防火墙时,会增加一个安全等级。

你用networking命令做了什么

 docker network create logging 

基本上创build新的networking,隔离其他docker容器在主机上访问它。 但只要涉及到外部可访问性,您仍然需要将其映射到主机端口

希望这回答你的问题