source

도커 - postgres 컨테이너에서 psql 명령을 실행하려면 어떻게 해야 합니까?

factcode 2023. 6. 3. 08:47
반응형

도커 - 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실행 중인 컨테이너에 대해 명령을 실행하는 명령입니다.itflags는 대화형 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

반응형