source

Ubuntu를 사용하여 도커 컨테이너 내에 pip 패키지를 설치할 수 없습니다.

ittop 2023. 7. 31. 21:52
반응형

Ubuntu를 사용하여 도커 컨테이너 내에 pip 패키지를 설치할 수 없습니다.

파이썬 애플리케이션과 함께 도커를 사용하는 방법에 대해 그림 가이드를 따르고 있지만 도커가 명령을 실행할 때

RUN pip install -r requirements.txt

다음 오류 메시지가 표시됩니다.

Step 3 : RUN pip install -r requirements.txt
 ---> Running in fe0b84217ad1
Collecting blinker==1.3 (from -r requirements.txt (line 1))
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/

이 메시지가 여러 번 반복되고 다음과 같은 메시지가 표시됩니다.

Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1))
  No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1))

그래서 어떤 이유에서인지 pip은 도커 컨테이너 안에서 어떤 패키지에도 접근할 수 없습니다.인터넷 접속을 허용하기 위해 제가 해야 할 일이 있나요?

는 문제가 , 그한 패키지package)에도.blinker==1.3 그래서 그것은 문제가 아닙니다.또한 이 문제는 해당 패키지에만 국한되지 않습니다.도 같은 하는 경우가 있습니다.pip install모든 패키지에 대한 명령입니다.

여기서 무슨 일이 일어나고 있는지 아는 사람?

문제는 도커가 올바른 DNS 서버를 사용하지 않기 때문입니다.다음과 같은 세 가지 방법으로 수정할 수 있습니다.

로컬 구성에 Google DNS 추가

/etc/resolv.conf를 수정하고 마지막에 다음 행 추가

# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4

다른 DNS 서버를 추가하려면 여기를 확인하십시오.

그러나 이 변경 사항은 영구적이지 않습니다( 스레드 참조).영구적으로 설정하는 방법:$ sudo nano /etc/dhcp/dhclient.conf : prepend domain-name-server로 합니다.prepend domain-name-servers 8.8.8.8, 8.8.4.4;

dhclient 파일을 다시 합니다.$ sudo dhclient.

도커 구성 수정 중

문서에 설명된 대로:

데스크톱에서 Ubuntu 또는 Ubuntu 파생 제품을 실행하는 시스템은 일반적으로 /etc/resolv.conf 파일의 기본 이름 서버로 127.0.0.1을 사용합니다.

도커에서 사용할 DNS 서버를 지정하는 방법

1. Log into Ubuntu as a user with sudo privileges.

2. Open the /etc/default/docker file for editing :

    $ sudo nano /etc/default/docker

3. Add the following setting for Docker.

    DOCKER_OPTS="--dns 8.8.8.8"

4. Save and close the file.

5. Restart the Docker daemon :

    $ sudo systemctl restart docker

도커를 실행할 때 매개 변수 사용

는 다음.--dns 8.8.8.8

도커 빌드 명령에 --network=host를 추가해야 했습니다.

docker build --network=host -t image_name .

저는 같은 문제를 겪었고 그것이 잠시 저를 괴롭혔고 온라인에서 많은 해결책을 시도했지만 소용이 없었습니다.하지만 저는 결국 다음과 같이 해결했습니다.

실행 중:

Ubuntu 16.04 
docker Server 18.03.0-ce
  1. DNS 서버의 주소를 검색합니다.

    다음 명령을 실행하여 DNS 서버의 주소를 검색합니다.

    $: nmcli dev show | grep 'IP4.DNS'
    IP4.DNS[1]:                192.168.210.2
    
  2. 도커 데몬 업데이트

    은 다음구파에서 생성합니다./etc/docker/daemon.json.파일에 다음 내용을 추가합니다.

    {
        "dns": ["192.168.210.2", "8.8.8.8"]
    }
    

    어레이의 첫 번째 항목은 네트워크의 DNS 서버이고, 두 번째 항목은 네트워크의 DNS를 사용할 수 없는 경우 백업으로 Google의 DNS 서버입니다.

    파일을 저장한 다음 도커 서비스를 다시 시작합니다.

    $: sudo service docker restart
    

저는 단순히 도커 데몬을 다시 시작하는 것이 도움이 되었습니다.

service docker restart

좋아요, 도커 기계를 다시 시작하면 문제가 해결됩니다.감사합니다 – ismails sunni

이것이 저를 위한 해결책이었습니다.

docker-machine restart <machine-name>

누군가 도커 컴포지를 사용하여 이것을 읽고 있는 경우.저는 다음과 같이 제 yaml 파일을 변경하여 이 문제를 해결할 수 있었습니다.

version: 3.4
service: my-app
  build:
  context: .
  network: host

글을 쓰는 것과 같습니다.

docker build . --network host

Ubuntu 사용자용

도커 구성에서 새 DNS 주소를 추가해야 합니다.

sudo nano /lib/systemd/system/docker.service

ExecStar 뒤에 dns를 추가합니다.

--dns 10.252.252.252 --dns 10.253.253.253

다음과 같이 보여야 합니다.

ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253

다음을 수행합니다.

systemctl daemon-reload
sudo service docker restart

효과가 있어야 합니다.

저은같경는에우는으로.docker version 1.13.0그리고.docker-machine 0.9.0Ubuntu 16.04탄자호 답변의 (2. Docker 구성 수정)을 다음과 같이 약간 수정해야 했습니다.

  1. sudo 권한이 있는 사용자로 Ubuntu에 로그인합니다.

  2. 편집할 /etc/default/docker 파일 열기:

    sudo vim /etc/default/docker
    
  3. 도커에 대해 다음 설정을 추가합니다.

    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
  4. 파일을 저장하고 닫습니다.

  5. Docker 데몬을 다시 시작합니다.

    sudo service docker restart
    

저는 도커의 DNS가 제대로 구성되지 않아 pip를 설치할 수 없었습니다.위의 단계를 시도해 보았지만 도커 DNS를 Google DNS로 구성하는 것은 노트북에 적용되지 않습니다.Docker의 DNS는 노트북의 할당된 IP에 DNS를 설정한 경우에만 올바르게 구성할 수 있습니다.

Ubuntu를 사용하는 경우 다음 단계에 따라 도커의 DNS를 구성할 수 있습니다.

  1. 장치에 할당된 IP를 확인합니다.다음 중 하나를 통해 이 정보를 찾을 수 있습니다.

    • wlan에서 또는 ifconfig
    • 에서 원하는 nmcli dev show | grep 'DNS'
  2. DNS에서 DNS /etc/docker/daemon.json하지 않는 이

    {
        "dns": ["your_ip_in_step_1"]
    }
    
  3. 다시 시작: "sudo service docker restart

저는 VPN에 접속하고 있었는데 도커가 제 개인 PYPI 경로를 찾지 못했기 때문입니다. 할 VPN을 사용합니다.docker build --network=host

저도 같은 문제가 있었어요.오류의 원인은 프록시입니다.

그래서 다음과 같이 도커 파일을 편집합니다.

RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port

이유는 알 수 없지만 오류는 pip이 해결하려고 한다는 것을 의미합니다./simple/blinker/ 이름으로 pypi.python.org어떤 URL도 생각해 낼 수 없기 때문에 매우 이상하게 보이는 부분입니다.urlparse호스트 이름 부분과 같은 문자열을 반환할 수 있습니다.혹시 문제가 있는지 확인해 보겠습니다.~/.pip/pip.conf

도커 초보자로서 도커에 대한 튜토리얼을 따라가다 문제가 발생했습니다.

https://docs.docker.com/get-started/part2

회사 LAN에서 Docker 17.03.1-ce를 사용하고 있습니다.

DNS 설정을 확인하고 다시 확인했습니다.인터넷 검색에서 찾은 DNS를 구성하는 다양한 방법을 사용했습니다.시작할 때 일부 오류가 발생했습니다.DNS를 구성하기 위해 최종적으로 결정한 접근 방식은 /etc/docker 디렉토리에 있는 daemon.json 파일을 통해 DNS가 구성되는 위 링크의 Linux 문제 해결 섹션에 있습니다.

하지만, 저는 여전히 같은 문제를 가지고 있었습니다.마지막으로 문제를 해결한 것은 http_proxyhttps_proxy 환경 변수를 통한 프록시 구성이었습니다.나는 그것들을 도커 파일에 지정했지만, RUN pip 명령 전에 그것들을 소홀히 했습니다.

DNS 문제인 것처럼 보였지만 RUN 명령보다 먼저 이러한 ENV 명령을 이동한 것이 저에게 차이를 주었습니다.그것이 이 문제를 가진 사람에게 도움이 될 경우.

저는 대학교 VPN에 연결되어 있었습니다.연결을 끊으면 문제가 "해결"됩니다.

도커 DNS를 Google DNS(8.8.8.8) 또는 10.0.0.2로 구성하는 작업이 회사 환경에서 작동하지 않았습니다.

실행 중: $drill @8.8.8.8 www.amazon.com 또는 @10.0.0.2가 이를 확인했습니다.

작동하는 DNS를 찾기 위해 $drill www.amazon.com 을 실행했고 네트워크에서 사용 중인 DNS IP를 제공했습니다.

그런 다음 다음 다음 단계를 사용하여 Ubuntu에서 도커의 DNS를 구성하도록 설정했습니다.

/etc/docker/daemon.json에서 dns가 변경됨

{
    "dns": ["the DNS ip from step1"]
}

Restart docker: sudo service docker restart

저는 도커에 처음이고 여기에 언급된 모든 방법을 시도했지만 여전히 제대로 이해하지 못했습니다.도커 버전은 18이었고 우분투 버전은 16이었습니다.저는 이 방법을 시도했습니다: - 먼저 저는 회사의 인터넷 네트워크로 도커를 만들고 있었습니다.이 네트워크는 일부 사이트를 차단하고 있거나 어떤 방식으로든 여기서 일이 잘 풀리지 않았습니다.그래서 두 번째로 저는 제 자신의 네트워크(예를 들어 휴대폰에서 사용)에 연결하여 시도했습니다.일이 제대로 진행되었습니다. 요건.txt가 설치되었고 도커가 빌드되었습니다.

TL;DR

도커 데몬의 기본 MTU를 업데이트합니다.

  1. 를 MTU 형식으로 .ip link.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1480 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 72:bd:50:24:5e:a9 brd ff:ff:ff:ff:ff:ff
  1. 를 작성/etc/docker/daemon.json물리적 인터페이스의 MTU 값을 입력합니다.
{
   "mtu": 1480
}
  1. 도커 서비스를 다시 시작합니다.
sudo service docker restart

설명.

Linux VM에서 도커를 실행하는 동안 동일한 문제가 발생했습니다.설정-network=host문제를 해결했지만 왜 효과가 있는지 몰라서 만족스러운 해결책은 아니었습니다.

몇 시간 동안 검색한 결과 물리적 인터페이스의 MTU와 컨테이너에 있는 가상 인터페이스의 MTU가 일치하지 않아 문제가 발생했습니다.가상 인터페이스의 MTU는 물리적 인터페이스의 MTU 크기보다 작거나 같아야 합니다. 그렇지 않으면 컨테이너가 물리적 MTU 크기보다 큰 패킷을 수신하지 못합니다.

제 경우 물리적 인터페이스(VM)가 다음의 MTU로 구성되었습니다.1480도커의 기본 MTU는 다음과 같습니다.1500.

에 관하여pipSSL 핸드셰이크가 지연된 것으로 보이는 문제(서버 hello를 읽지 못함)에서 나타나서 반복되는 결과를 초래했습니다.ReadTimeout오류

여기에 설명된 솔루션을 사용했지만 문제는 여기에 설명되어 있습니다.

public repo에서 직접 액세스/설치가 허용되지 않는 개인 환경에서 pip install을 실행하려고 했던 것 같습니다.그런 경우 요구 사항에 --index-url 및 --trusted-host를 추가할 수 있습니다.다음과 같은 txt:

요구 사항들.txt:

--index-url https://pypi.internal.org/api/pypi/org.python.pypi/simple
--trusted-host pypi.internal.org pypi.python.org pypi.org files.pythonhosted.org
blinker==1.3

검색을 많이 했는데 Windows용 도커 데스크톱에서 이 오류를 해결할 수 있는 답이 없는 것 같습니다. 도커에 dns 추가.json이 문제를 해결했습니다.

도커 데스크톱으로 이동 -> 도커 엔진 여기에서 도커.json을 수정해 보십시오.

변경전

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": false
  }
}

After change
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": false
  },
  "dns": [
    "114.114.114.114",
    "8.8.8.8"
  ]
}

json 파일에 이 dns를 추가하는 것은 나에게 도움이 되었습니다.

그냥 놔둬요.때때로 Pypi는 고장났다고 생각하게 만들기 위해 당신의 얼굴에 시끄러운 연결 문제를 가지고 있습니다.만약을 위해, 그것이 굴러가게 놔두면, 당신은 그것이 스스로 해결될 수 있다는 것을 알게 될 것입니다.

이러한 빨간 오류 라인에도 불구하고 결론은 "성공적으로 구축됨"입니다.

$ docker build .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608
 ---> 1e5034711aa9
Step 2 : RUN pip install prometheus-client requests
 ---> Running in f3c580fc93ae
Collecting prometheus-client
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Downloading prometheus_client-0.0.13.tar.gz
Collecting requests
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Downloading requests-2.10.0-py2.py3-none-any.whl (506kB)
Building wheels for collected packages: prometheus-client
  Running setup.py bdist_wheel for prometheus-client: started
  Running setup.py bdist_wheel for prometheus-client: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78
Successfully built prometheus-client
Installing collected packages: prometheus-client, requests
Successfully installed prometheus-client-0.0.13 requests-2.10.0
 ---> 19c5e3cfe08f
Removing intermediate container f3c580fc93ae
Successfully built 19c5e3cfe08f

언급URL : https://stackoverflow.com/questions/28668180/cant-install-pip-packages-inside-a-docker-container-with-ubuntu

반응형