在特定端口上运行Docker容器

时间:2014-08-17 15:12:29

标签: ruby-on-rails docker digital-ocean dokku

我在DigitalOcean上使用Dokku部署了Rails应用程序。我创建了一个Postgres数据库,并将其与Rails应用程序相关联。一切正常,直到我重新启动液滴。我发现应用程序停止工作,因为在重新启动时,每个Docker容器都会获得一个新端口,而Rails应用程序无法连接到它。如果我运行dokku postgresql:info myapp它会显示旧端口,但它已更改。如果我手动更改database.yml并将其推送到dokku repo,一切正常。

那么每次服务器重启时如何防止Docker分配不同的端口?或者也许可以选择更改正在运行的容器的端口。

1 个答案:

答案 0 :(得分:3)

我对Dokku没有多少经验,但对于码头工人来说,没有A容器的端口。 在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&run运行命令的更多信息,请参阅:https://docs.docker.com/reference/commandline/cli/#run