source

외부에서 도커 컨테이너의 Postgresql에 연결

nicesource 2023. 5. 24. 22:13
반응형

외부에서 도커 컨테이너의 Postgresql에 연결

도커 컨테이너의 서버에 Postgresql이 있습니다.외부, 즉 로컬 컴퓨터에서 연결하려면 어떻게 해야 합니까?그것을 허용하려면 어떤 설정을 적용해야 합니까?

다음 방법으로 Postgres를 실행할 수 있습니다(포트 매핑).

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

이제 컨테이너의 포트 5432를 서버의 포트 5432에 매핑했습니다. -p <host_port>:<container_port>.은 당신의 에서 볼 수 public-server-ip:5432

테스트 대상:postgres 데이터베이스 실행(위 명령)

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
05b3a3471f6f        postgres            "/docker-entrypoint.s"   1 seconds ago       Up 1 seconds        0.0.0.0:5432->5432/tcp    some-postgres

컨테이너 내부로 이동하여 데이터베이스를 작성합니다.

docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q

로컬 호스트(툴 또는 psql 클라이언트가 있는 경우)로 이동합니다.

psql -h public-ip-server -p 5432 -U postgres

(password my secret password)

postgres=# \l

                             List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 mytest    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres   

따라서 로컬 호스트에서 데이터베이스(서버의 도커에서 실행 중)에 액세스하는 것입니다.

게시물에는 그것이 자세히 설명되어 있습니다.

리눅스에서 실행할 수 있었습니다.

  1. 도커 포스트그레스를 실행합니다. 포트가 게시되었는지 확인하십시오. 저는 가볍기 때문에 알파인을 사용합니다.

    docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
    
  2. 다른 터미널을 사용하여 postgresuri를 사용하여 호스트에서 데이터베이스에 액세스합니다.

    psql postgresql://postgres:1234@localhost:5432/postgres
    

Mac 사용자의 경우 psql을 pgcli로 대체

다음 방법으로 도커 exec 명령을 통해 액세스할 수도 있습니다.

$ docker exec -it postgres-container bash

# su postgres

$ psql

또는

$ docker exec -it postgres-container psql -U postgres

저는 도커 컨테이너에 있는 포스트그레스와 함께 장고를 사용하고 있습니다.도커 확장 파일에서 다음을 추가합니다.

db:
    image: postgres:10-alpine
    environment:
        - POSTGRES_DB=app
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=supersecretpassword
    ports:
        - "6543:5432"

것이.ports " " 를 합니다.6543((으(으)ㄹ )와 합니다5432로컬 컴퓨터에서 액세스할 수 있습니다.제가 직접 DBeaver를 연결했습니다. 이렇게 하면 앱 요청과 로컬 컴퓨터 요청 간의 포트 충돌을 방지할 수 있습니다.

처음에는 포트 5432가 사용 중(django app에서 사용 중)이라 pgAdmin이나 DBeaver로 접속할 수 없다는 메시지를 받았습니다.

@Martin처럼 도커 작곡을 사용했다면 늦었다는 것을 압니다.

컨테이너 내부의 psql에 연결하는 데 도움이 된 스니펫입니다.

docker-compose run db bash

root@de96f9358b70:/# psql -h db -U root -d postgres_db

저는 50개의 명성이 없기 때문에 논평할 수 없습니다.이게 도움이 되길 바랍니다.

외부에서 컨테이너에 연결할 때마다 컨테이너에 있는 데이터를 볼 수 있기를 원한다고 가정합니다.이렇게 하려면 postgres 이미지에 데이터를 유지해야 합니다.

지속적인 데이터가 없는 경우 처음에 수행한 모든 작업을 반복해야 합니다.
3, 5, 6, 7 및 8단계는 질문에 직접 대답합니다.

다음은 Windows 10 PowerShell에서 수행한 전체 프로세스에 대한 자세한 개요입니다(Linux와 macOS에서도 명령은 동일합니다).

1단계: 비관리 모드에서 파워셸 시작

2단계: postgres 도커 이미지 다운로드:
docker pull postgres:latest

3단계: 도커 컨테이너를 분리 모드로 시작하고 볼륨을 생성하여 대상에 바인딩하여 postgres 이미지에 데이터 유지
(참고: 기본적으로 5432는 사용되는 기본 포트이지만 pgadmin, dbeaver 등과 같은 클라이언트의 연결 오류를 방지하기 위해 명시적으로 명시합니다.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest

4단계: 실행 중인 용기의 상태 확인
docker ps -a

5단계: 대화형 모드에서 container_name 내부로 이동합니다.
(참고: ls, pwd 등과 같은 명령어는 설치 중에 Linux 컨테이너를 확인한 경우 여기서 실행할 수 있습니다.)
docker exec -it postgres-test psql -U postgres

6단계: 샘플 데이터를 생성합니다.이 시점에서, 당신은 게임을 할 수 있습니다.psql

# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q

7단계: 다음과 같은 데이터베이스 클라이언트 응용프로그램을 엽니다.pgadmin또는dbeaver연결 필드에 다음을 입력합니다.

Host: localhost
Database: test
User: postgres
Password: password

8단계: 쿼리 입력select * from test_table할 수 .123

호스트 시스템에서 이미 postgres를 실행하고 있어서 네트워크 연결을 허용하지 않기 때문에 컨테이너에서 임시 postgres 인스턴스를 실행하고 데이터베이스를 두 줄로 만들었습니다.

# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres

# Create database
docker exec -it postgres-container createdb -U postgres my-db

어떤 이유에서인지 5432 포트가 보호되고 있는 것 같습니다.을 포트구에변습니에서 했습니다.5432:54325416:5432다음 명령은 도커 컨테이너 외부에서 postgres 데이터베이스에 연결하는 데 사용되었습니다.

psql -h localhost -p 5416 -U <my-user> -d <my-database>

로컬 호스트에서 연결하려면 '--net host'를 추가해야 합니다.

docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

다음을 사용하여 로컬 호스트에서 exec을 사용하지 않고 서버에 직접 액세스할 수 있습니다.

psql -h localhost -p 5432 -U postgres

를 실행하는 합니다.postgres

  1. 를 설치합니다.psql

brew search postgres

brew install postgresql

2.

docker run --name postgres -e POSTGRES_DB=users \
  -e POSTGRES_USER=john \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 -d postgres
psql --host=localhost --username=john --dbname=users

localhost(mac)에서 postgres 컨테이너에 연결하려고 했습니다.도커 합성 파일의 포트를 5432에서 3306으로 변경하고 컨테이너를 시작했습니다.내가 왜 그랬는지 모르겠어요 :|

그리고 PSquel과 admin을 통해 postgres에 연결하려고 했는데 연결이 되지 않았습니다.

포트 5432로 다시 전환한 후에는 모두 정상적으로 작동합니다.

  db:
    image: postgres
    ports:
      - 5432:5432
    restart: always
    volumes:
      - "db_sql:/var/lib/mysql"
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres_db

이것이 제가 나누고 싶었던 경험이었습니다.아마도 누군가가 그것을 이용할 수 있을 것입니다.

먼저 포스트그레스의 도커 이미지를 엽니다.

docker exec -it <container_name>

그러면 당신은 뿌리를 얻을 것입니다 --root@868594e88b53:/#데이터베이스 연결이 필요합니다.

psql postgresql://<username>:<databasepassword>@postgres:5432/<database>

이것은 나에게 효과가 있었습니다.

PGPASSWORD=postgres psql -h localhost -p 3307 -U postgres -d postgres

위의 내용을 사용하여 초기 스크립트를 로드합니다.

PGPASSWORD=postgres psql -h localhost -p 3307 -U postgres -d postgres < src/sql/local/blabla.sql

포트를 다음과 같이 재매핑하지 않음:

docker run -p3307:5432 --name postgres -e POSTGRES_PASSWORD=postgres -d postgres

django 백엔드 애플리케이션인 경우에는 다음과 같은 작업을 수행할 수 있습니다.

docker exec -it container_id python manage.py dbshell

게이트웨이 마이크로 서비스 애플리케이션을 구축한 후에도 동일한 문제가 발생했습니다.Heidisql에서 용기화된 postgresql에 연결할 수 없습니다.

현재 포트뿐만 아니라 docker-compose.yml에 postgresql 비밀번호를 지정하여 해결했습니다.

따라서 도커-compose.yml을 찾아서 열어야 합니다.그런 다음 POSTGRES_PASSWORD를 입력하고 포트 "5432:5432"를 지정해야 합니다.

서비스: microservice33-postgresql: 환경: - POSTGRES_USER=microservice33 - POSTGRES_PASSWORD=www - POSTGRES_HOST_AUTH_METOD=신뢰 포트: - 5432:5432

참조용 링크 및 스크린샷 게시물

여기에 좋은 답변이 있지만 pgAdmin을 로컬 컴퓨터에 설치하고 해당 IP와 pgAdmin 노출 포트(기본값 5432)를 사용하여 원격 컴퓨터에 연결할 수 있습니다.

docker ps -a컨테이너 ID를 가져오려면 도커 exec -itpsql -U -W

언급URL : https://stackoverflow.com/questions/37694987/connecting-to-postgresql-in-a-docker-container-from-outside

반응형