postgresql - 如何使用 docker-compose 设置 postgres 的服务器名称?

标签 postgresql docker docker-compose

假设我想要一个设置 2 个服务的 docker-compose.yml:一个 postgresql 服务器和 adminer (一种 phpmyadmin)。 如果我声明

# docker-compose.yml
version: '3.1'
services :
    myservername:
        image: postgres:10-alpine
        ports:
            - 5432:5432
        environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
            POSTGRES_DB: mydb
    admin:
        image: adminer
        restart: always
        ports:
        - 8080:8080

使用 docker-compose up -d 然后在 localhost:8080 上我可以连接到 postgres :

docker-compose set with "myservername" for database service

这就像一个魅力。完美的。但是……

但由于我项目中的特定配置文件,我需要将 postgres 服务器名称设为 localhost。所以我尝试了:

# docker-compose.yml
version: '3.1'
services :
    localhost: # <----- that's the change
        image: postgres:10-alpine
        ports:
            - 5432:5432
        environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
            POSTGRES_DB: mydb
    admin:
        image: adminer
        restart: always
        ports:
            - 8080:8080

当我尝试连接时: SQLSTATE[08006] [7] 无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1) 上运行并在端口 5432 上接受 TCP/IP 连接?无法连接到服务器:地址不可用服务器是否在主机“localhost”(::1) 上运行并在端口 5432 上接受 TCP/IP 连接? docker-compose set with "localhost" for database service

有什么想法吗?

最佳答案

您可以使用 docker 主机网络模式来完成这项工作,其中容器使用主机网络而不是获取自己的隔离网络,请参阅 https://docs.docker.com/network/host/https://docs.docker.com/compose/compose-file/#network_mode .

不过这存在一定的安全风险(因为容器可以完全访问主机网络)。 不应在生产中使用 :)

但是像这样:

version: '3.1'
services :
    myservername:
        network_mode: host
        image: postgres:10-alpine
        ports:
            - 5432:5432
        environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
            POSTGRES_DB: mydb
    admin:
        network_mode: host
        image: adminer
        restart: always
        ports:
        - 8080:8080

关于postgresql - 如何使用 docker-compose 设置 postgres 的服务器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59194471/

相关文章:

sql - group by 不分组聚合?

postgresql - 如何在 Debian 的 Postgres 10 中使用 scram-sha-256?获取 "FATAL: password authentication failed"

mongodb - 为什么 docker commit 没有将数据保存在我的 mongo 数据库容器中?

linux - 在 Docker compose 中限制可用的主机资源而不使用 swarm

docker - 使用 Docker 在 Windows 中安装 CentOS 7 桌面

ruby-on-rails - 没有参数 $1 ...向 Rails for Postgresql 发送 SQL 语句,我做错了什么?

postgresql - 尝试更新 Postgres 表中的 JSON 但出现未知错误

c# - 将现有的 docker 链接到外部配置文件和数据以在 C# 核心(linux 容器)中使用它

docker - Docker on Cloud托管

java - Docker 编写 Redis 和 Spring boot 应用程序 : java.net.ConnectException : Connection refused (Connection refused)",