도커 - postgres 컨테이너에서 psql 명령을 실행하려면 어떻게 해야 합니까?
데이터베이스에서 몇 가지 쿼리를 실행하기 위해 postgres 이미지의 psql을 사용하고 싶습니다.하지만 불행히도 postgres 컨테이너에 연결했을 때 psql 명령을 찾을 수 없다는 오류가 발생했습니다...
컨테이너에서 postgreql 쿼리나 명령을 어떻게 실행할 수 있는지는 저에게 조금 의문입니다.
postgres 컨테이너에서 psql 명령을 어떻게 실행합니까?(나는 도커 세계의 새로운 사람입니다)
Ubuntu를 호스트 시스템으로 사용하고 호스트 시스템에 postgres를 설치하지 않고 postgres 컨테이너를 대신 사용합니다.
docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
yiialkalmi_app_1 /bin/bash Exit 0
yiialkalmi_nginx_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp
yiialkalmi_php_1 php-fpm Up 9000/tcp
yiialkalmi_postgres_1 /docker-entrypoint.sh postgres Up 5432/tcp
yiialkalmi_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
여기에 컨테이너:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
315567db2dff yiialkalmi_nginx "nginx -g 'daemon off" 18 hours ago Up 3 hours 0.0.0.0:80->80/tcp, 443/tcp yiialkalmi_nginx_1
53577722df71 yiialkalmi_php "php-fpm" 18 hours ago Up 3 hours 9000/tcp yiialkalmi_php_1
40e39bd0329a postgres:latest "/docker-entrypoint.s" 18 hours ago Up 3 hours 5432/tcp yiialkalmi_postgres_1
5cc47477b72d redis:latest "docker-entrypoint.sh" 19 hours ago Up 3 hours 6379/tcp yiialkalmi_redis_1
그리고 이건 제 도커 컴포지션입니다.yml:
app:
image: ubuntu:16.04
volumes:
- .:/var/www/html
nginx:
build: ./docker/nginx/
ports:
- 80:80
links:
- php
volumes_from:
- app
volumes:
- ./docker/nginx/conf.d:/etc/nginx/conf.d
php:
build: ./docker/php/
expose:
- 9000
links:
- postgres
- redis
volumes_from:
- app
postgres:
image: postgres:latest
volumes:
- /var/lib/postgres
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
redis:
image: redis:latest
expose:
- 6379
docker exec -it yiialkalmi_postgres_1 psql -U project -W project
약간의 설명
docker exec -it
실행 중인 컨테이너에 대해 명령을 실행하는 명령입니다.그it
flags는 대화형 tty를 엽니다.기본적으로 단말기에 부착됩니다.bash 터미널을 열고 싶다면 이렇게 할 수 있습니다.
docker exec -it yiialkalmi_postgres_1 bash
yiialkalmi_postgres_1
컨테이너 이름(컨테이너 ID를 대신 사용할 수 있습니다. 이 경우 다음과 같습니다.40e39bd0329a
)psql -U project -W project
실행 중인 컨테이너에 대해 실행할 명령U
사용자W
연결 시 사용자에게 암호를 입력하라는 메시지가 표시되어야 함을 psql에 알립니다.이 매개 변수는 선택 사항입니다.이 매개 변수가 없으면 일반적으로 암호가 필요하다는 것을 알게 되는 추가 연결 시도가 있습니다. Postgre를 참조하십시오.SQL 문서.project
연결할 데이터베이스.다음이 필요하지 않습니다.-d
첫 번째 비옵션 인수일 때 dbname으로 표시하는 매개 변수는 다음 문서를 참조하십시오.-d
"명령줄의 첫 번째 비옵션 인수로 dbname을 지정하는 것과 같습니다."
사용자가 여기에 지정합니다.
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
이것은 저에게 효과가 있었습니다.
bash로 이동:
docker exec -it <container-name> bash
bash에서:
psql -U <dataBaseUserName> <dataBaseName>
아니면 이 한 줄기:
docker exec -it <container-name> psql -U <dataBaseUserName> <dataBaseName>
도와드릴까요?
도커를 사용하여 Postgres 컨테이너를 구성한 후 다음을 사용하여 bash 터미널을 엽니다.
docker exec -it <containerID>(postgres container name / ID) bash
Postgres 사용자로 전환합니다.
su - postgres
그런 다음 실행:
psql
그러면 Postgres의 터미널 액세스가 열립니다.
컨테이너에서 데이터베이스를 복원해야 하는 경우 다음 작업을 수행할 수 있습니다.
docker exec -i app_db_1 psql -U postgres < app_development.back
추가하는 것을 잊지 마십시오.-i
.
:)
도커 컴포지트를 사용하여 다음을 입력하여 포스트그레스 컨테이너 내부에 들어갈 수 있습니다.
docker-compose exec postgres bash
포스트그레스가 서비스의 이름이라는 것을 알고 있습니다.도커 합성 파일에 있는 Postgresql 서비스의 이름으로 대체합니다.
많은 도커 매핑 파일이 있는 경우 명령을 실행할 특정 도커-docker.yml 파일을 추가해야 합니다.대신 다음 명령을 사용합니다.
docker-compose -f < specific docker-compose.yml> exec postgres bash
예를 들어 local.yml이라는 도커 합성 파일로 명령을 실행하려면 여기서 명령은 다음과 같습니다.
docker-compose -f local.yml exec postgres bash
그런 다음 psql 명령을 사용하여 데이터베이스 이름을 -d 플래그로 지정하고 사용자 이름을 -U 플래그로 지정합니다.
psql -U <database username you want to connect with> -d <database name>
바암음!!!당신이 참여했습니다.
"postgres" 컨테이너를 실행 중인 경우:
docker run -it --rm --link postgres:postgres postgres:9.6 sh -c "exec psql -h \$POSTGRES_PORT_5432_TCP_ADDR -p \$POSTGRES_PORT_5432_TCP_PORT -U postgres"
우리는 다음을 사용하여 터미널 단축키로 컨테이너에 들어갈 수 있습니다.
도커 실행 -it <docker id | name> <sh | bash>
만약 그것이 sh라고 가정한다면,
psql -U postgres
효과가 있을 것
방금 로컬 테스트를 시작했습니다.-c
당신이 CLI에서 찾고 있던 것입니다.
docker run -it --rm --name psql-test-connection -e PGPASSWORD=1234 postgres psql -h kubernetes.docker.internal -U awx -c "\conninfo"
You are connected to database "awx" as user "awx" on host "kubernetes.docker.internal" (address "192.168.65.4") at port "5432".
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
createdb -O docker docker &&\
많은 일반적인 설정에서 Postgre는SQL 포트가 호스트에 게시됩니다.
postgres:
ports:
- '12345:5432'
이 경우 데이터베이스에 연결하기 위해 도커 관련 작업을 수행할 필요가 없습니다.당신은 할 수 .psql
에서 첫 클라이언트를 가리키는 ports:
번호.
psql -h localhost -p 12345 -U project
이 접근 방식은 다음만 필요합니다.psql
다른 Postgrey 니다포 레그스트한평. 컨테이너를 호스가로 .ports:
도커 외부에서 액세스할 수 있도록 합니다. (Theports:
제품 간 통신에는 필요하지 않으며, 생산 지향적인 설정에서는 이러한 기능을 사용할 수 없습니다.)은 실할필없다니를 실행하는 .docker
명령 및 수반되는 보안 문제, 그리고 그것은 추가 명령 견적의 여러 계층을 피할 수 있습니다.docker exec sh -c '...'
순서.
외부 터미널을 사용하지 않고 컨테이너 CLI 내에서 SQL 명령을 실행할 수 있습니다.
psql -d [database-name] -U [username] -W
[database-name]을(를) db-name 및 [username]으로, 실제 사용자 이름으로 바꾸는 것은 실제 사용자 이름입니다.
플래그:
-d : Specify the database name you want to connect -U : Specify the username as whom you want to connect -W : Prompt for the password
언급URL : https://stackoverflow.com/questions/37099564/docker-how-can-run-the-psql-command-in-the-postgres-container
'source' 카테고리의 다른 글
대응 유형 스크립트 - 사용자 지정 특성 추가 (0) | 2023.06.08 |
---|---|
Firebase 장치 간 알림 튜토리얼에서 참조하는 "serviceAccountKey.json"이란 무엇입니까? (0) | 2023.06.08 |
UI 테이블 뷰 횡단 머리글의 기본 스크롤 동작 변경 (0) | 2023.06.03 |
XAML 스타일에서 솔리드 배경을 그라데이션으로 변경하는 방법은 무엇입니까? (0) | 2023.06.03 |
이전 버전의 루비 보석 제거 (0) | 2023.06.03 |