代码之家  ›  专栏  ›  技术社区  ›  Peter Butkovic

使用预配置的服务器在docker中运行pgadmin4

  •  4
  • Peter Butkovic  · 技术社区  · 7 年前

    我希望在我们的基础架构中运行pgadmin4,这样postgres服务器在docker build/1期间就可以进行预配置。st开始。

    我试图修改内部使用的 /var/lib/pgadmin/pgadmin4.db 1上的sqlite DB。st start,但这会导致UI中出现错误(一旦选择特定的postgres服务器:

    找不到服务“”的定义

    我尝试了以下内容:

    目录结构:

    find ./  -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'       
    |____
    |____dump
    | |____servergroup.csv
    | |____server.csv
    | |____import_db.sh
    |____Dockerfile
    

    哪里 Dockerfile 是:

    cat Dockerfile
    # rebuild:
    # docker build -t pgadmin4:3.0-custom .
    # run:
    # docker run --rm -it -e PGADMIN_DEFAULT_EMAIL=admin -e PGADMIN_DEFAULT_PASSWORD=admin -p8081:80 docker build -t pgadmin4:3.0-custom
    
    FROM dpage/pgadmin4:3.0
    
    COPY dump/ /dump
    
    RUN \
        apk add --no-cache sqlite && \
        chmod +x /dump/import_db.sh && \
        # re rely on the current entrypoint.sh impl
        sed -i '/python run_pgadmin.py/a   \/dump\/import_db.sh' /entrypoint.sh && \
        cat /entrypoint.sh
    

    事实上,它只是修改了 https://github.com/postgres/pgadmin4/blob/master/pkg/docker/entrypoint.sh 要运行 import_db.sh 1上的脚本。st开始。

    哪里 dump/import_db.sh 是:

    cat dump/import_db.sh
    #!/bin/sh
    
    echo ".tables" | sqlite3 -csv /var/lib/pgadmin/pgadmin4.db
    
    # remove header and `1,1,Servers` entry (would cause duplicates)
    cat /dump/servergroup.csv | sed '1d' | grep -v 1,1,Servers > /tmp/servergroup.in.csv
    echo "csv servergroup:"
    cat /tmp/servergroup.in.csv
    
    echo "DB servergroup:"
    sqlite3 -csv -header /var/lib/pgadmin/pgadmin4.db "select * from servergroup;"
    echo ".import /tmp/servergroup.in.csv servergroup" | sqlite3 -csv /var/lib/pgadmin/pgadmin4.db
    
    # remove header
    cat /dump/server.csv | sed '1d' > /dump/server.in.csv
    echo "csv server:"
    cat /dump/server.in.csv
    
    echo "DB server:"
    sqlite3 -csv -header /var/lib/pgadmin/pgadmin4.db "select * from server;"
    echo ".import /dump/server.in.csv server" | sqlite3 -csv /var/lib/pgadmin/pgadmin4.db
    

    Csv文件内容:

    cat dump/server.csv 
    id,user_id,servergroup_id,name,host,port,maintenance_db,username,password,role,ssl_mode,comment,discovery_id,hostaddr,db_res,passfile,sslcert,sslkey,sslrootcert,sslcrl,sslcompression,bgcolor,fgcolor,service
    1,1,2,servername,localhost,5432,postgres,postgres,"",,prefer,,,"","",,<STORAGE_DIR>/.postgresql/postgresql.crt,<STORAGE_DIR>/.postgresql/postgresql.key,,,0,,,
    
    cat dump/servergroup.csv
    id,user_id,name
    2,1,my-group
    1,1,Servers
    

    你知道如何纠正我的错误吗?或者任何其他可以为我提供预配置的pgadmin4 docker容器的方法?

    2 回复  |  直到 7 年前
        1
  •  8
  •   svaor    4 年前

    映像dpage/pgadmin的当前版本为4.24。此版本具有 support 对于服务器定义列表(servers.json)的外部配置:

    {
        "Servers": {
            "test": {
                "Name": "test",
                "Group": "Servers",
                "Port": 5432,
                "Username": "postgres",
                "Host": "postgres",
                "SSLMode": "prefer",
                "MaintenanceDB": "postgres"
            }
        }
    }
    

    卷绑定可以按以下方式配置:

    volumes:
        - ./servers.json:/pgadmin4/servers.json
    

    第一次启动容器时,服务器组和服务器将自动配置。

        2
  •  2
  •   Murtuza Z    7 年前

    看起来这改变了 service 将列值设置为空字符串,而不是NULL。

    是否可以尝试更新 服务 列为空

    sqlite> UPDATE server SET service = NULL;
    

    提交更改并重新启动pgAdmin4;请重试连接到该服务器。