Skip to content

문제 해결 / 코드가 외부 네트워크에 접근할 수 없음

스크립트 내에서 외부 네트워크에 접근할 수 없는 경우는 대부분 DNS, 방화벽 때문입니다.

구체적으로는 스크립트가 requests.get('http://bing.com')와 같은 코드를 실행할 때 다음과 같은 오류가 발생합니다:

  1. Temporary failure in name resolution
  2. Connection refused
  3. Connection to bing.com timed out
  4. 기타 네트워크 오류

다음 작업을 순서대로 수행하여 문제를 해결할 수 있습니다:

  1. 호스트 머신에서 ping 8.8.8.8을 실행하여 호스트 머신이 공용 네트워크에 접근할 수 있는지 확인합니다
  2. 호스트 머신에서 curl http://bing.com을 실행하여 호스트 머신의 DNS가 정상인지 확인합니다
  3. docker exec -it {DataFlux Func 컨테이너 ID} sh -c 'exec ping 8.8.8.8'를 실행하여 컨테이너 내부에서 공용 네트워크에 접근할 수 있는지 확인합니다
  4. docker exec -it {DataFlux Func 컨테이너 ID} sh -c 'exec curl http://bing.com -i'를 실행하여 컨테이너 내부의 DNS가 정상인지 확인합니다

8.8.8.8은 흔히 사용되는 공용 DNS 서버의 주소입니다

설치된 DataFlux Func 이미지에 ping 명령이 없다면 curl http://{IP 주소} 명령으로 대체할 수도 있습니다

가능한 원인 및 해결 방법:

가능한 원인 해결 방법
호스트 머신이 공용 네트워크에 접근할 수 없거나 DNS가 비정상 운영 체제 네트워크 구성을 확인하고 조정
컨테이너 내부에서 공용 네트워크에 접근할 수 없거나 DNS가 비정상 Docker 관련 구성을 확인하고 조정하며, 필요한 경우 운영 체제 네트워크 구성도 확인합니다

Docker DNS 구성 참조

/etc/docker/daemon.json 파일을 편집하고 다음 내용을 추가한 후 저장하고 Docker 서비스를 다시 시작하세요:

JSON
1
2
3
4
5
6
{
    "dns" : [
        "8.8.8.8",
        "8.8.4.4"
    ]
}