Docker 中的 Postgres;两个实例冲突端口
Postgres in Docker; two instances clashing ports
我创建了一个 docker 容器来托管 postgres 服务器。我正在尝试获取此 运行 的两个实例,它们索引两个完全不同的数据库,因此依赖于一组不同的卷。
我是运行下面两个命令一个接一个:
docker run -v ... -p 5432:9001 -P --name psql-data postgres-docker
docker run -v ... -p 5432:9002 -P --name psql-transactions postgres-docker
第一个容器创建并运行,但第二个调用抛出以下错误:
Error response from daemon: failed to create endpoint psql-transactions on network bridge: Bind for 0.0.0.0:5432 failed. Port already in use.
我发现这有点令人困惑,因为我认为容器的目的是隔离端口绑定。我可以理解是否让两个容器将 5432 映射到主机上的同一端口,但我试图将它们分别安装到 9001 和 9002。
如何防止这个问题?
端口的顺序应该颠倒过来。应该是-p host_port:container_port
首先,如果您需要从 Docker 主机外部访问它们,则只发布 (-p
) 个端口;如果数据库仅供容器中的其他服务 运行 使用,则无需发布端口;容器可以通过 docker 网络访问数据库。
如果您打算从外部访问数据库,您需要调换 -p
中的端口顺序; -p <host-port>:<container-port>
。所以在你的情况下;
docker run -v ... -p 9001:5432-P --name psql-data postgres-docker
docker run -v ... -p 9002:5432 -P --name psql-transactions postgres-docker
为了避免端口冲突,您需要 运行 像这样:
docker run -v ... -p 9001:5432 -P --name psql-data postgres-docker
docker run -v ... -p 9002:5432 -P --name psql-transactions postgres-docker
我创建了一个 docker 容器来托管 postgres 服务器。我正在尝试获取此 运行 的两个实例,它们索引两个完全不同的数据库,因此依赖于一组不同的卷。
我是运行下面两个命令一个接一个:
docker run -v ... -p 5432:9001 -P --name psql-data postgres-docker
docker run -v ... -p 5432:9002 -P --name psql-transactions postgres-docker
第一个容器创建并运行,但第二个调用抛出以下错误:
Error response from daemon: failed to create endpoint psql-transactions on network bridge: Bind for 0.0.0.0:5432 failed. Port already in use.
我发现这有点令人困惑,因为我认为容器的目的是隔离端口绑定。我可以理解是否让两个容器将 5432 映射到主机上的同一端口,但我试图将它们分别安装到 9001 和 9002。
如何防止这个问题?
端口的顺序应该颠倒过来。应该是-p host_port:container_port
首先,如果您需要从 Docker 主机外部访问它们,则只发布 (-p
) 个端口;如果数据库仅供容器中的其他服务 运行 使用,则无需发布端口;容器可以通过 docker 网络访问数据库。
如果您打算从外部访问数据库,您需要调换 -p
中的端口顺序; -p <host-port>:<container-port>
。所以在你的情况下;
docker run -v ... -p 9001:5432-P --name psql-data postgres-docker
docker run -v ... -p 9002:5432 -P --name psql-transactions postgres-docker
为了避免端口冲突,您需要 运行 像这样:
docker run -v ... -p 9001:5432 -P --name psql-data postgres-docker
docker run -v ... -p 9002:5432 -P --name psql-transactions postgres-docker