我的设置基于运行两个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"))
答案 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可以为您节省一步。