docker postgres pgadmin 로컬 연결


100

nginx, php 및 postgres로 우분투 이미지를 만들었습니다.

pgadmin내 로컬 컴퓨터에있는 현재 이미지의 postgres 데이터베이스를 연결하고 싶습니다 .

Docker 검사기를 사용하여 이미지 ip를 사용하여 로컬 pgadmin과 연결을 시도했지만 많은 성공을 거두지 못했습니다. 또한 연결이 작동하도록 로컬에서 일부 포트를 구성 해 보았습니다.


PostgreSQL이 외부 연결을 수신하는지 (구성 파일 확인) 또는 해당 포트가 로컬 컴퓨터에서 열려있는 것으로 나타나는지 여부를 말하지 않습니다.
Richard Huxton 2014-08-28

1
약간의 정보를 제공하므로으로 그 질문에 대답 할 수하지 않는 것
크 툴루

답변:


92

사람들이 "그 질문에 대답하는 것이 불가능 해 보인다"고 느끼는 이유를 모른다는 것은 유효한 질문입니다.

그래서, 당신이하려는 일을하는 방법은 다음과 같습니다.

  1. Docker Hub에서 postgres 이미지 가져 오기

    docker pull postgres:latest

  2. 아래 명령을 사용하여 컨테이너를 실행하십시오.

    docker run -p 5432:5432 postgres

  3. Docker의 inspect 명령을 사용하여 IP 찾기

  4. 해당 IP, PORT, 사용자 이름 및 암호를 사용하여 PGADMIN에 연결하십시오.

  5. Docker postgres 컨테이너에 액세스 할 수 있는지 확인하기 위해 아래와 같은 간단한 텔넷을 수행 할 수도 있습니다.

    telnet IP_ADDRESS 5432


16
이것으로 포트를 게시하는 경우 -p 5432:5432컨테이너의 IP를 찾을 필요가 없습니다. 호스트 IP를 사용할 수 있습니다. 127.0.0.1또는 그냥localhost
Davos

게시물의 의도는 유효하지만 SE에 대한 고품질 게시물이 아닙니다. 시작하려면 실제 '질문'이 없습니다. 또한 프로세스를 시도한 방법이나 수행하는 동안 수신 한 오류에 대한 표시가 없습니다. 즉, 나는 당신이 잘 응답했다고 생각합니다.
duct_tape_coder

3
이 답변은 나에게 유용하므로 유효한 질문입니다.
Todd

컨테이너를 호스트에 매핑하기 위해 -p 5432 : 5432를 사용했지만 여전히 연결 오류가 발생합니다. 도커 검사에서 얻은 IPAddress를 사용해 보았고 작동합니다.
ginad

50

Windows 1.12.6 (9655) 용 도커를 실행하는 Windows 10에서 성공한 것은 다음과 같습니다.

  1. 최신 postgres 가져 오기

    docker pull postgres:latest

  2. postgres 컨테이너를 실행합니다.

    docker run -d -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password123 --name db-my -p 5432:5432 --restart=always postgres

  3. 그런 다음 pgadmin 웹 사이트 에서 최신 버전의 pgAdmin4를 설치했습니다.

  4. pgAdmin 4를 실행하여 새 서버를 만들고 다음과 같이 입력합니다. 호스트 : 127.0.0.1 포트 : 5432 사용자 이름 : 사용자 암호 : password123

  5. 그런 다음 모든 것이 정상입니다. docker postgres 인스턴스 성공에 연결하십시오.

45

또는 Postgres와 Pgadmin을 하나의 docker-compose파일 에 결합 하고 user pgadmin4@pgadmin.org, pwd : 로 로그인 할 수 admin있습니다. Posgres 서버를 추가하려면 hostname postgres, port를 사용하십시오 5432.

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "6543:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: TEST_SM
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - postgres
    ports:
      - "5555:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped

volumes:
  postgres-data:

3
나는 '호스트 이름 "postgres"를 주소로 변환 할 수 없음 : nodename 또는 servname 제공, 또는 알려지지 않음'을 얻습니다.
Enrique Ortiz Casillas

1
주소로 호스트 이름 "포스트 그레스"를 번역 할 수있는 이름이 해결되지 않습니다
프록시

2
이면 docker network lspostgres-pgadmin 네트워크 (내는 postgres_postgres)에 대한 브리지가 표시됩니다. 그러면 docker network inspect postgres_postgres각각 ip / 호스트 이름이있는 두 개의 컨테이너를 볼 수 있습니다 . Postgres (내는 postgres_db_1)에서 하나를 가져와 pgAdmin에서 성공적으로 연결합니다.
Nil

28

이것이 내가 한 일입니다

postgres 용

docker run -p 5432:5432  --name container-postgresdb -e POSTGRES_PASSWORD=admin -d postgres

pgadmin 용

docker run -p 5050:80  -e "PGADMIN_DEFAULT_EMAIL=name@example.com" -e "PGADMIN_DEFAULT_PASSWORD=admin"  -d dpage/pgadmin4

pgadmin에 대한 연결 문자열

host: host.docker.internal
database: postgres
user: postgres
password: admin

잘 작동합니다 !!!!!


5
Unable to connect to server: could not translate host name "host.docker.internal" to address: Try again
duct_tape_coder

2
또한이 접근 방식을 사용하여 docker에서 postgres와 pgAdmin을 모두 만들었습니다. 어떤 입력 값으로 나를 위해 일한 것은 @SolidSnake에서 대답했다 - stackoverflow.com/a/58224344/4288961 > 고정 표시기가 CONTAINER_ID을 검사 | grep IPAddress. 그리고 호스트로이 결과 IP 주소 사용
Prusdrum

대박!. 매우 유용합니다. 'host.docker.internal'값만 필요했습니다
Hernán Acosta

20

제 경우에는 명령을 통해 내 postgre 이미지를 검사하는 문제를 해결할 수 있습니다.

docker inspect CONTAINER_ID  | grep IPAddress.

그래서 도커 IP 주소를 사용하여 pgadmin 4 연결을 구성했는데 모든 것이 정상이었습니다. @Afshin Ghazi 덕분에


17

pgAdmin이 동일한 Ubuntu 호스트 / 게스트에서 실행되도록 의도 된 경우 postgres 컨테이너를 연결해야하므로 이름으로 확인할 수 있습니다.

1. postgres 컨테이너를 실행합니다.

docker run --name some-postgres -e POSTGRES_PASSWORD=postgres -d postgres

2. pgAdmin 컨테이너를 실행합니다.

docker run -p 80:80 --link some-postgres -e "PGADMIN_DEFAULT_EMAIL=email@domain.com" -e "PGADMIN_DEFAULT_PASSWORD=postgres" -d dpage/pgadmin4

3. 이제 phAdmin 웹 앱에 새 서버를 추가 할 때 some-postgres서버 이름으로 사용 합니다.

--link some-postgrespgAdmin을 불러 왔을 때 주목하십시오 . 이 명령은 postgres 컨테이너를 pgAdmin 컨테이너에 표시합니다.


1
psq를 사용하여 서버에 연결할 수 있으며 pgadmin 인터페이스에 로그인합니다. 하지만 pgadmin 인터페이스에서 postgres 서버에 연결할 때 어떤 네트워크 / 포트를 사용해야합니까?

1
Docker 문서 ( docs.docker.com/network/links ) 에서 주목할 가치가 있습니다. Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link.또한 --linkpgadmin 컨테이너를 사용하여 postgres 컨테이너와 통신 할 수 있는 운이 없었습니다 . 그러나 pgadmin의 로컬 설치에서 postgres에 액세스 할 수 있습니다.
duct_tape_coder

13

데이터베이스와 pgAdmin을 가져 오기 위해 이것을 docker yaml 파일에 포함했습니다.

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    expose:
      - "5432"
    ports:
      - 8000:5432
    volumes:
      - ./services/database/schema.sql:/docker-entrypoint-initdb.d/1-schema.sql
      - ./services/database/seed.sql:/docker-entrypoint-initdb.d/2-seed.sql
  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

postgres 사용자 이름은 alphaone이고 암호는 xxxxxxxxxxx입니다.

DO가 docker ps다음 컨테이너 ID를 얻을 수 있습니다docker inspect <dockerContainerId> | grep IPAddress

예 : docker inspect 2f50fabe8a87 | grep IPAddress

Ip 주소를 pgAdmin 및 docker에서 사용되는 데이터베이스 자격 증명에 삽입합니다.

pgAdmin


1
이것은 도움이되었습니다. 위와 같이 docker PgAdmin 포털의 서버 구성에 추가하려면 docker Postgres와 연결된 컨테이너 내에서 올바른 IP 주소를 grep해야했습니다. 퍼팅 localhost이 작동하지 않았습니다.
Andrew Lobban

6

PostgreSQL이 실행중인 것을 확인하고 PgAdmin의 로컬 복사본으로 연결할 수있는 경우 ...

대답은 간단합니다. Docker 내에서 실행되는 PgAdmin 대신 host.docker.internalistead를 사용 localhost하십시오.

<code> localhost </ code> 대신 <code> host.docker.internal </ code> 사용


5

제 경우에는 PostgreSQL 컨테이너가 있었기 때문에 컨테이너를 변경하지 않았거나 도커 작성 접근 방식을 만들지 않았습니다. PostgreSQL을 설치하려면 몇 달 후에 pgadming이 필요했기 때문에 이것이 제 접근 방식입니다.

  1. docker inspect my_container_id_postgreSQL
  2. PostgreSQL에 할당 된 네트워크는 다음과 같습니다.

    "네트워크": { "docker_default": { "IPAddress": "172.18.0.2", ...}}

  3. --network명령으로 내 PGADMIN을 실행했습니다.

    docker run -p 85:80 --network docker_default -e 'PGADMIN_DEFAULT_EMAIL=user@domain.com'-e 'PGADMIN_DEFAULT_PASSWORD = SuperSecret'-d dpage / pgadmin4

  4. Ip 주소를 pgAdmin 및 docker에서 사용되는 데이터베이스 자격 증명에 삽입합니다.

누군가에게 유용 할 수 있기를 바랍니다. 문안 인사.



4

컨테이너의 postgres 포트를 로컬 시스템에 노출해야합니다. 다음과 같이 컨테이너를 실행하면됩니다.

docker run -p 5432:5432 <name/id of container>

GUI 클라이언트 또는 CLI와 연결할 때 ip-address가 localhost ip-address 인 경우에도 localhost가 아닌 ip-address를 사용해야합니다.

docker ps postgres 컨테이너가있는 IP 주소를 제공합니다.


4

이틀 동안이 문제에 직면 한 후 그 문제를 해결할 수있었습니다.

이 문제의 해결책은 이미 do inspect

docker inspect CONTAINER_ID

하지만이 명령을 실행하는 동안 Host Config Config Network Settings 등과 같은 많은 로그를 얻었 으므로 0.0.0.0을 시도 하고 config, host, networkSettings 다른 -2 IPAddress를 시도했기 때문에 pgAdmin 연결 에 추가 할 IPAddress를 혼동 했습니다. 로그하지만 마지막으로 많이 시도한 후에 작동합니다.

어떤 IP로 작동하는지, 우리는 해당 네트워크 IP 주소를 추가해야합니다 ( postgrespgAdmin 을 연결하기 위해 생성 한 ).

내 경우처럼 내가 실행할 때 :-

docker postgres_container 검사

 "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "sdffsffsfsfsfsf123232e2r3pru3ouoyoyuosyvo8769696796",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {
            "5432/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "5432"
                }
            ]
        },
        "SandboxKey": "/var/run/docker/231231Ad132",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "postgres": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": [
                    "postgres",
                    "0e2j3bn2m42"
                ],
                "NetworkID": "35rhlhl3l53l5hlh3523233k3k4k22l3hk2k4",
                "EndpointID":"b3424n43k52o2i4n235k1k4l2l4hj234f14n2",
                "Gateway": "192.168.16.1",
                "IPAddress": "192.168.16.2",
                "IPPrefixLen": 20,
                "IPv6Gateway": "",

따라서 NetworkSettings-> Network-> Postgres (내가 만든 네트워크)-> IPAddress ie "IPAddress": "192.168.16.2"를 추가해야합니다.

이 IP를 추가하면 작동합니다.

도움이 되길 바랍니다.


2

이를 위해 Docker 브리지 네트워크를 만들 수도 있습니다.

$ docker network create pgnet
a0ae44aaf6f806fc37302e4c603b4828c4edb8d487fd9cd90e2fb19ae1d5c65f

$ docker run --detach \
    --name pg \
    --network pgnet \
    --publish 5432:5432 \
    --restart always \
    --env POSTGRES_PASSWORD=pg123 \
    --volume ${PWD}/data:/var/lib/postgresql/data \
    postgres:12.1
b60611e43727dabe483c1f08fdf74961b886ce05b432a10a0625bd1b6db87899

$ docker run --detach \
    --name pgadm \
    --network pgnet \
    --publish 8000:80 \
    --volume ${PWD}/pgadmin:/var/lib/pgadmin \
    --env PGADMIN_DEFAULT_EMAIL=user@domain.com \
    --env PGADMIN_DEFAULT_PASSWORD=pgadm123 \
    dpage/pgadmin4:4.20
27f9ce1c1c4c383ee1507f4e2d88f6ef33d4fcf5b209a8a03b87519f90d56312

http : // localhost : 8000 /을 엽니 다 .

  1. 새 서버 추가를 클릭하십시오.
  2. 만들기-서버
    1. 이름 : db
    2. 호스트 이름 / 주소 : pg
    3. 사용자 이름 : postgres
    4. 비밀번호 : pg123
  3. 저장

위에 사용 된 호스트 이름 / 주소는 다음에서 지정한 Postgres 컨테이너의 이름입니다. --name pg


이것은 컨테이너 이름을 호스트 이름으로 사용하는 고유 한 접근 방식입니다. Nginx 등을 설정하는 것과 동일한 접근 방식입니다. 말이된다.
Sean McCarthy

1

컨테이너의 올바른 IP를 찾으려면 다음 명령을 실행하십시오.

컨테이너 ID 확인 :

docker ps

컨테이너의 올바른 IP를 확인하려면 :

docker inspect <ID_CONTAINER> | grep "IPAddress"

Docker를 사용한 PostgreSQL 및 PgAdmin의 구성은 간단합니다. 옳지 않은 경우 문제가 더 심하면 처음부터 구성을 다시 실행하는 것이 좋습니다.

다음은이 문제를 해결하기 위해 개발 한 스크립트입니다. script-sh / install-docker-postgres-and-pgadmin


1

macOS IP의 경우 postgres및 제공 pgadmin4하는 것과 다릅니다 docker inspect. 유형

docker-machine ls

왼쪽에있는 서버 이름을 살펴보십시오. 그건 default기본적으로.

docker-machine ip defaultIP 것이다 당신을 위해 사용할 필요가 , pgadmin4브라우저 및 위해 postgrespgadmin4설정.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.