psycopg2를 사용하여 Postgres 컨테이너에 연결하지 못했습니까?

J. Auon

다음과 같은 도커 작성 파일이 있습니다.

version: "3.7"

services:
  app:
    stdin_open: true  
    tty: true 
    build:
      context: .
      dockerfile: app.Dockerfile
    volumes:
      - ${HOST_SAVE_DIRC}:${CONTAINER_SAVE_DIRC}
    depends_on:
      - postgres

  postgres:
    image: 'postgres'
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_HOST_AUTH_METHOD=trust
    restart: always
    expose:
      - "5432"

같은 변수 POSTGRES_USER는 env 파일의 항목입니다. app.Dockerfile은 다음과 같습니다.

FROM python:3.8.3-slim-buster
COPY src /src/
COPY init.sql .
COPY .env .
COPY run.sh run.sh
COPY requirements.txt .
RUN ls -a
RUN pip install --no-cache-dir -r requirements.txt

컨테이너가 생성되면 사용자는 app호출되는 프로그램의 주요 기능 을 사용하여 컨테이너에 로그인됩니다.

로부터 app용기 나는 연결을 시도하고 postgres를 통해 용기 psycopg2. 그러나 그렇게하려고하면 다음과 같은 오류가 발생합니다.

psycopg2.OperationalError: could not connect to server: No route to host
    Is the server running on host "postgres" (172.22.0.2) and accepting
    TCP/IP connections on port 5432?

psycopg2다음과 같은 전화를 사용하여

with psy.connect(host='postgres', port=5432, user='postgres', password='postgres') as conn:
    ...

이 psycopg2 호출의 항목은 파일에 제공된 env 파일과 일치 docker-compose합니다.

내 이해는 Postgres가 기본적으로 포트 5432를 사용한다는 것입니다. 또한 docker-compose두 개의 컨테이너를 생성 할 때 해당 컨테이너 이름에 대한 도커 네트워크를 생성합니다. DIR_default여기서는 DIRdocker-compose 파일이있는 디렉터리의 이름입니다. 여기서 각 컨테이너는 docker-compose 파일에 나열된 이름을 사용하여 액세스 할 수 있습니다. 이 경우 'postgres'및 'app').

다양한 시도 중 :

  • 확인한 결과 컨테이너가 생성되고 사용자가 실행되는 사이에 데이터베이스가 작동하지 않습니다.

  • 컨테이너 이름, postgres 로그인 정보 등을 변경하는 것과 같은 다양한 작은 변경을 시도했습니다.

  • postgres 컨테이너 이름을 명시 적으로 link: "postgres:postgres".

  • 여기에 제안 된 다른 솔루션

어떤 도움이라도 대단히 감사하겠습니다! 이처럼 단순한 일이 발생해야 할 이유가 없지만 여기에 있습니다.


편집하다:

Postgres컨테이너에서 컨테이너를 Ping하는 app것은 실행할 때 작동하는 것처럼 보입니다 docker exec app ping postgres_container_name. 이것은 Docker 네트워크가 올바르게 설정되었고 문제가 내 문제라는 신호입니까?


편집 2 :

모든 이미지와 컨테이너를 지우고 Docker 데몬을 다시 시작한 다음 PC를 다시 시작했습니다. 두 경우 모두 변경되지 않습니다.

참고로 ping 명령은 다음과 같습니다.

docker exec python-app ping name_given_to_postgres_container

다음과 같은 다양한 진술을 반환

64 bytes from name_given_to_postgres_container.project_name_default (172.18.0.3): icmp_seq=1 ttl=64 time=0.090 ms

내가 착각하지 않는 한 성공적인 핑 신호라고 생각합니다.


docker-compose에 제공된 최상위 .env 파일

HOST_SAVE_DIRC=~/python_projects/project_directory/directory_in_project
CONTAINER_SAVE_DIRC=/pdfs

POSTGRES_DB=project_name  # same as project_directory
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_PORT=5432

다음은 requirements.txtPython 앱용 파일입니다.

certifi==2020.4.5.1
chardet==3.0.4
idna==2.9
psycopg2-binary==2.8.5
read-env==1.1.0
requests==2.23.0
urllib3==1.25.9

를 사용하여 Postgres 컨테이너로 docker exec -it container_id bash실행 psql -U postgres하는 것은 restart: always제거 된 경우에도 성공한 것으로 보입니다 . docker-compose 파일에 이름이 지정된 데이터베이스도 생성 된 것을 볼 수 있습니다. 이 용기는 저절로 죽지 않는다고 확신합니다.

그러나 netcat via를 사용하여 Postgres 컨테이너의 5432 포트에 연결하면 nc name_given_to_postgres_container 5432-5433psycopg2에서 반환 한 것과 유사한 오류가 반환됩니다.

arxivist_postgres_1 [172.22.0.3] 5433 (?) : No route to host
arxivist_postgres_1 [172.22.0.3] 5432 (postgresql) : No route to host

에서도 동일한 오류가 반환됩니다 curl. 그래서 내 생각에 문제는 Postgres 컨테이너, psycopg2 또는 호스트 이름과 관련된 것이 아니라 포트와 관련된 것이 있습니까?


편집 3 :

이 프로젝트를 수정하기위한 마지막 시도로이 게시물이 참조하는 전체 프로젝트 가이 링크에 게시 됩니다 . 누구든지 repo를 다운로드하고이를 통해 도커 컨테이너를 직접 빌드하려는 ./start.sh경우 솔루션을 찾는 데 필요한 것일 수 있습니다!

J. Auon

Fedora 32를 실행하는 내 컴퓨터에 Docker 설정이 있다고 생각했습니다. 그러나이 기사 를 통해 알게 된 것처럼 Fedora 32에서 Docker를 설정하려면 이전에 알지 못했던 몇 가지 추가 단계가 필요합니다.

특히이 문제의 경우 문서에 나열된 명령을 사용하여 로컬 네트워크의 방화벽에서 Docker를 허용 목록에 Docker에 추가합니다.

sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-masquerade

그래서 내 문제의 근본 원인은 단순히 내 app컨테이너가 postgres방화벽에 의해 컨테이너에 액세스하지 못하도록 차단 된 것이라고 생각합니다 . 위의 변경으로 프로그램이 마침내 작동했습니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

요청 및 psycopg2를 사용하여 Postgres에 Json 삽입

분류에서Dev

psycopg2를 사용하여 postgres에서 CURRENT_TIMESTAMP () 호출

분류에서Dev

psycopg2를 사용하여 postgres에 삽입 실행

분류에서Dev

psycopg2를 사용하여 원격 호스트에서 postgres 데이터베이스에 연결할 수 없습니까?

분류에서Dev

호스트 시스템에 postgres를 설치하지 않고 pip를 사용하여 psycopg2를 설치하는 방법이 있습니까?

분류에서Dev

psycopg2를 사용하여 postgresql 데이터베이스에 연결할 수 없습니다.

분류에서Dev

psycopg2와 함께 다른 python3 컨테이너의 postgres 컨테이너를 사용할 수 없습니다.

분류에서Dev

postgres 컨테이너는 컨테이너 내부에 관계를 제공하지 않습니다.

분류에서Dev

psycopg2 / psql이 postgres db에 연결할 수 없습니다.

분류에서Dev

psycopg2 연결 방법에서 스키마를 지정하는 방법은 무엇입니까?

분류에서Dev

Psycopg2 : Python과 함께 Psycopg2를 사용하여 충돌을 삽입하고 업데이트하는 방법은 무엇입니까?

분류에서Dev

boot2docker를 사용하여 컨테이너로 실행중인 redis에 연결할 수 없습니다.

분류에서Dev

ssh를 사용하여 로컬로 VSCode 컨테이너에 연결하는 방법은 무엇입니까?

분류에서Dev

Jira 컨테이너를 통해 Postgres 컨테이너에 연결

분류에서Dev

node-postgres를 사용하여 Node에서 Postgres의 적절한 테이블에 연결할 수 없습니다.

분류에서Dev

cloud_sql_proxy를 사용하여 컨테이너에서 Cloud SQL에 연결할 수 없습니다.

분류에서Dev

Android <21에서 Retrofit 2를 사용하여 HTTPS에 연결하지 못했습니다.

분류에서Dev

docker-compose를 사용하는 Rails 앱은 mysql 컨테이너에 연결되지 않습니다.

분류에서Dev

Psycopg2를 사용하여 PostgreSQL에서 충돌시 기존 행을 업데이트 할 수 없습니다.

분류에서Dev

USB를 사용하여 PC에 연결된 휴대폰을 감지하지 못했습니다.

분류에서Dev

Docker 컨테이너는 Docker 네트워크를 사용하여 다른 컨테이너에 연결할 수 없습니다.

분류에서Dev

Psycopg2를 사용하여 실패한 트랜잭션으로 인해 SQL 제한 조건이 지연된대로 작동을 멈출 수 있습니까?

분류에서Dev

VSCode를 사용하여 원격으로 Docker 컨테이너에 연결할 때 "code"명령이 작동하지 않습니다.

분류에서Dev

psycopg2를 사용하여 직렬 열이있는 테이블에 삽입

분류에서Dev

Spring 4.0 webstocket stomp api를 사용하여 Rabbitmq에 연결하지 못했습니다.

분류에서Dev

로컬 머신에서 실행중인 Postgres 데이터베이스를 Docker 컨테이너에 연결하려면 어떻게해야합니까?

분류에서Dev

psycopg2를 사용하여 PostgreSQL에서 PASSWORD로 USER를 만들 때 오류가 발생합니다.

분류에서Dev

systemctl이 버스에 연결하지 못했습니다-Docker Ubuntu : 16.04 컨테이너

분류에서Dev

psycopg2를 사용하여 "INFO :"줄을 어떻게 얻습니까?

Related 관련 기사

  1. 1

    요청 및 psycopg2를 사용하여 Postgres에 Json 삽입

  2. 2

    psycopg2를 사용하여 postgres에서 CURRENT_TIMESTAMP () 호출

  3. 3

    psycopg2를 사용하여 postgres에 삽입 실행

  4. 4

    psycopg2를 사용하여 원격 호스트에서 postgres 데이터베이스에 연결할 수 없습니까?

  5. 5

    호스트 시스템에 postgres를 설치하지 않고 pip를 사용하여 psycopg2를 설치하는 방법이 있습니까?

  6. 6

    psycopg2를 사용하여 postgresql 데이터베이스에 연결할 수 없습니다.

  7. 7

    psycopg2와 함께 다른 python3 컨테이너의 postgres 컨테이너를 사용할 수 없습니다.

  8. 8

    postgres 컨테이너는 컨테이너 내부에 관계를 제공하지 않습니다.

  9. 9

    psycopg2 / psql이 postgres db에 연결할 수 없습니다.

  10. 10

    psycopg2 연결 방법에서 스키마를 지정하는 방법은 무엇입니까?

  11. 11

    Psycopg2 : Python과 함께 Psycopg2를 사용하여 충돌을 삽입하고 업데이트하는 방법은 무엇입니까?

  12. 12

    boot2docker를 사용하여 컨테이너로 실행중인 redis에 연결할 수 없습니다.

  13. 13

    ssh를 사용하여 로컬로 VSCode 컨테이너에 연결하는 방법은 무엇입니까?

  14. 14

    Jira 컨테이너를 통해 Postgres 컨테이너에 연결

  15. 15

    node-postgres를 사용하여 Node에서 Postgres의 적절한 테이블에 연결할 수 없습니다.

  16. 16

    cloud_sql_proxy를 사용하여 컨테이너에서 Cloud SQL에 연결할 수 없습니다.

  17. 17

    Android <21에서 Retrofit 2를 사용하여 HTTPS에 연결하지 못했습니다.

  18. 18

    docker-compose를 사용하는 Rails 앱은 mysql 컨테이너에 연결되지 않습니다.

  19. 19

    Psycopg2를 사용하여 PostgreSQL에서 충돌시 기존 행을 업데이트 할 수 없습니다.

  20. 20

    USB를 사용하여 PC에 연결된 휴대폰을 감지하지 못했습니다.

  21. 21

    Docker 컨테이너는 Docker 네트워크를 사용하여 다른 컨테이너에 연결할 수 없습니다.

  22. 22

    Psycopg2를 사용하여 실패한 트랜잭션으로 인해 SQL 제한 조건이 지연된대로 작동을 멈출 수 있습니까?

  23. 23

    VSCode를 사용하여 원격으로 Docker 컨테이너에 연결할 때 "code"명령이 작동하지 않습니다.

  24. 24

    psycopg2를 사용하여 직렬 열이있는 테이블에 삽입

  25. 25

    Spring 4.0 webstocket stomp api를 사용하여 Rabbitmq에 연결하지 못했습니다.

  26. 26

    로컬 머신에서 실행중인 Postgres 데이터베이스를 Docker 컨테이너에 연결하려면 어떻게해야합니까?

  27. 27

    psycopg2를 사용하여 PostgreSQL에서 PASSWORD로 USER를 만들 때 오류가 발생합니다.

  28. 28

    systemctl이 버스에 연결하지 못했습니다-Docker Ubuntu : 16.04 컨테이너

  29. 29

    psycopg2를 사용하여 "INFO :"줄을 어떻게 얻습니까?

뜨겁다태그

보관