繁体   English   中英

在特定端口上运行 Docker 容器

[英]Running Docker container on a specific port

我在 DigitalOcean 上部署了一个与 Dokku 一起部署的 Rails 应用程序。 我创建了一个 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告诉--expose=5432公开端口 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM