Docker容器通讯限制

时间:2020-02-06 19:58:53

标签: docker

我的设置基于运行两个Docker容器,一个容器带有API,另一个容器带有数据库。 这种方法可以使两个容器都具有暴露给Web服务的端口。

但是我想要的是DB容器(toolname-db)只能公开给API容器(toolname-api)。这样可以确保数据库不会直接暴露给Web服务。

如何确保必须设置才能更改设置?

当前我使用以下命令:

library(mapview)
library(sf)
library(RColorBrewer)

mapview(franconia, zcol = "SHAPE_LEN", col.regions=brewer.pal(9, "YlGn"))

1 个答案:

答案 0 :(得分:0)

只有发布了端口的容器才能从Docker空间外部访问。因此,您需要从数据库容器中删除-p选项。

要使两个容器能够互相通信,它们必须位于同一network上。 Docker的默认设置是为了与现在非常旧的网络设置兼容,因此,尽管不需要任何特殊设置,您仍需要手动创建网络。

最后,您不需要--net host。这将禁用所有Docker的网络设置;禁用了带有-p的端口映射,并且您无法与本身没有发布端口的容器通信。 (我通常将它推荐为一种解决方法,可解决硬编码的localhost连接字符串。)

将最终设置保留为:

sudo docker build -t toolname .
sudo docker network create tool
sudo docker run -d --net=tool --name=toolname-db mdillon/postgis
sudo docker run -d --net=tool -p 4444:4444 --name=toolname-api toolname

正如@BentCoder在评论中建议的那样,使用Docker Compose一起运行多个容器是很常见的。如果这样做,it creates a network for you可以为您节省一步。