在特定的端口上运行Docker容器

DigitalOcean上有一个与Dokku一起部署的Rails应用程序。 我创build了一个Postgres数据库,并将其与Rails应用程序链接起来。 一切正常,直到我重新启动了液滴。 我发现应用程序停止工作,因为重新启动每个Docker容器得到一个新的端口和Rails应用程序无法连接到它。 如果我运行dokku postgresql:info myapp它显示旧的端口,但它已经改变。 如果我手动更改database.yml,并推到dokku回购一切正常。

那么如何防止每次服务器重新启动时Docker分配不同的端口? 或者也许有一个选项来更改正在运行的容器的端口。

我对Dokku没有太多的经验,但对docker工人来说,没有一个集装箱港口的东西。 在docker中,您可以公开一个容器的端口来接收传入的请求,并将其映射到主机中的特定端口。 例如,你可以在一个容器中运行你的postgres,并告诉docker你要公开5432,默认的postgresql端口来接收传入的请求:

 sudo docker run --expose=5432 -P <IMAGE> <COMMAND> 

--expose=5432告诉docker公开端口5432接收来自外部的传入连接。 -P标志告诉docker把你容器中所有暴露的端口映射到主机的端口。 你可以连接到指向你主机的ip:port的postgres。 如果要将容器的端口映射到不同的主机端口,可以使用-p标志:

 sudo docker run --expose=5432 -p=666 <IMAGE> <COMMAND> 

不知道这是否可以帮助你与Dokku环境,但我希望如此。 有关docker的运行命令的更多信息,请参阅: https : //docs.docker.com/reference/commandline/cli/#run