Couchdb 创建具有可变端口的容器

Couchdb 创建具有可变端口的容器,couchdb,port,docker,Couchdb,Port,Docker,我想为couchdb创建一个映像,以运行多个couchdb实例。由于要澄清的原因有点长,我希望容器中的couchdb实例侦听非默认端口,这在图像定义时也是未知的,因为这将是一个容器参数 从主机运行容器时,我将使用: sudo docker run -d -p 10000:30000 --name couchdb -e COUCHDB_PORT=30000 my/couchdb 这将使couchdb正在侦听的容器(30000)中的端口可以通过主机中的端口10000访问。此端口应为每个容器的参数

我想为couchdb创建一个映像,以运行多个couchdb实例。由于要澄清的原因有点长,我希望容器中的couchdb实例侦听非默认端口,这在图像定义时也是未知的,因为这将是一个容器参数

从主机运行容器时,我将使用:

sudo docker run -d -p 10000:30000 --name couchdb -e COUCHDB_PORT=30000 my/couchdb
这将使couchdb正在侦听的容器(30000)中的端口可以通过主机中的端口10000访问。此端口应为每个容器的参数

从容器中,我可以这样做:

curl -X GET localhost:30000
curl -X GET localhost:10000
从主持人那里我可以做到:

curl -X GET localhost:30000
curl -X GET localhost:10000
这两个请求将访问同一个couchdb服务器

设置容器很容易(只需处理环境变量以自动编辑couchdb配置文件),但现在我遇到了阻塞问题。在Dockerfile的末尾,我有:

# the default couchdb port, which in my case is not
#     known at image creation time
EXPOSE 5984 
显然,我需要公开容器中运行服务的端口,但在创建映像时我不知道这一点。这是一个运行时参数,每个容器的参数都不同


启动容器时如何公开端口?

我不明白为什么需要容器中的守护进程具有非标准端口。你能再澄清一下吗?每个容器都有自己的虚拟网络接口,该接口依赖于应用程序。对不起,但我很难解释背后的理由。但问题很清楚,我认为:如何定义一个容器,它公开一个只有在容器启动时才知道的端口?你能发布dockerfile@jeckyll2hide吗?或者你在couchdb上使用的docker镜像是什么?@jeckyll2hide,我不明白,couchdb用默认端口5984唤醒;然后,如果您需要使用couchdb的各种容器,那么唯一需要的配置就是执行:
docker run-d-p5984:30000——name couchdb my/couchdb
docker run-d-p5984:30001——name couchdb my/couchdb
docker run-d-p5984:30002——name couchdb my/couchdb
小心@jeckyllhide,目前使用docker很难管理DBs+数据容器集群,因为使用docker进行持久化非常复杂……我建议您重新考虑创建coucheDB集群。此外,您还可以暂停这些项目的进度。