외부에서 도커 컨테이너의 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
따라서 로컬 호스트에서 데이터베이스(서버의 도커에서 실행 중)에 액세스하는 것입니다.
이 게시물에는 그것이 자세히 설명되어 있습니다.
리눅스에서 실행할 수 있었습니다.
도커 포스트그레스를 실행합니다. 포트가 게시되었는지 확인하십시오. 저는 가볍기 때문에 알파인을 사용합니다.
docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
다른 터미널을 사용하여 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:5432
5416: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
- 를 설치합니다.
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
'source' 카테고리의 다른 글
전자 앱에서 메뉴 모음 제거 (0) | 2023.05.24 |
---|---|
xxx'의 구독이 클라우드 'AzureCloud'에 없습니다. (0) | 2023.05.24 |
Visual Studio 프로젝트에 개발자 설명서를 추가하는 가장 좋은 방법 (0) | 2023.05.24 |
json_decode()를 사용하여 개체 대신 배열을 만듭니다. (0) | 2023.05.24 |
Xcode에서 기존/미사용 데이터 모델 버전을 삭제하는 방법 (0) | 2023.05.24 |