programing

도커 - Ubuntu - bash: ping: 명령을 찾을 수 없습니다.

starjava 2023. 8. 5. 09:45
반응형

도커 - Ubuntu - bash: ping: 명령을 찾을 수 없습니다.

다음과 같이 Ubuntu를 실행하는 Docker 컨테이너가 있습니다.

docker run -it ubuntu /bin/bash

그러나 그것이 가지고 있는 것처럼 보이지 않습니다.ping.예.

bash: ping: command not found

그것을 설치해야 합니까?

기본적인 명령어가 누락된 것 같습니다.나는 노력했다.whereis ping아무 것도 보고하지 않습니다.

도커 이미지는 매우 미미하지만 설치할 수 있습니다.ping다음을 통해 공식 우분투 도커 이미지에서:

apt-get update -y
apt-get install -y iputils-ping

당신이 필요로 하지 않을 가능성이 있습니다.ping이미지에 표시되며 테스트 목적으로만 사용하려고 합니다.위의 예는 도움이 될 것입니다.

하지만 필요하다면,ping당신의 이미지에 존재하기 위해, 당신은 만들 수 있습니다.Dockerfile또는commit위의 명령을 새 이미지로 실행한 컨테이너입니다.

커밋:

docker commit -m "Installed iputils-ping" --author "Your Name <name@domain.com>" ContainerNameOrId yourrepository/imagename:tag

도커 파일:

FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash

도커 이미지를 만드는 데는 나중에 적절한 캐시 파일을 지우는 등의 모범 사례가 있습니다.

이것은 Ubuntu를 위한 Docker Hub 페이지이며 이렇게 생성됩니다.최소한의 패키지만 설치되어 있으므로 추가로 필요한 것이 있으면 직접 설치해야 합니다.

apt-get update && apt-get install -y iputils-ping

그러나 일반적으로 "도커 파일"을 만들고 빌드합니다.

mkdir ubuntu_with_ping
cat >ubuntu_with_ping/Dockerfile <<'EOF'
FROM ubuntu
RUN apt-get update && apt-get install -y iputils-ping
CMD bash
EOF
docker build -t ubuntu_with_ping ubuntu_with_ping
docker run -it ubuntu_with_ping

Google을 사용하여 튜토리얼을 찾고 기존 도커 파일을 검색하여 일반적으로 수행하는 방식을 확인하십시오. :) 예를 들어 이미지 크기는 실행을 통해 최소화해야 합니다.apt-get clean && rm -rf /var/lib/apt/lists/*끝나고apt-get install명령을 실행합니다.

또는 ping이 이미 설치된 도커 이미지(: busybox:

docker run --rm busybox ping SERVER_NAME -c 2

일반적으로 사람들은 Ubuntu/CentOS의 공식 이미지를 사용하지만 이러한 이미지가 최소한이며 그 위에 아무것도 없다는 것을 깨닫지 못합니다.

Ubuntu의 경우 이 이미지는 Canonical에서 제공하는 공식 rootfs tarball로 작성됩니다.Ubuntu의 최소 설치이므로 이 이미지에는 C, C만 포함됩니다.기본적으로 UTF-8 및 POSIX 로케일.

net-tools(ifconfig, netstat 포함), ip-utils(ping 포함) 등을 컨테이너에 설치할 수 있으며 컨테이너에서 이미지를 만들거나 이미지를 생성하는 동안 이 도구를 설치할 도커 파일을 작성할 수 있습니다.

아래는 도커 파일 예제이며, 이미지를 생성할 때 다음 도구가 포함됩니다.

FROM vkitpro/ubuntu16.04
RUN     apt-get  update -y \
&& apt-get upgrade -y \
&& apt-get install iputils-ping -y \
&& apt-get install net-tools -y \
CMD bash

또는 기본 이미지에서 컨테이너를 시작하고 이러한 유틸리티를 컨테이너에 설치한 다음 이미지에 커밋합니다.도커 커밋 - m "여러 설명 메시지" container_id image_name: dockerest

해당 이미지에는 모든 것이 설치됩니다.

Docker에서 Linux를 최소로 설치해도 경로가 정의되지 않는 경우가 있으므로 ...을 사용하여 ping을 호출해야 합니다.

cd /usr/sbin
ping <ip>

저는 데비안 10에 대한 아래의 진술을 사용했습니다.

apt-get install iputils-ping

이런 종류의 오류가 발생할 때마다

bash: <command>: command not found
  • 해당 명령이 이미 이 솔루션에서 작동하는 호스트:

    dpkg -S $(which <command>)
    
  • 해당 패키지가 설치된 호스트가 없습니까?사용해 보십시오.

    apt-file search /bin/<command>
    

를 실행할 수 .ping컨테이너의 네트워크 네임스페이스를 입력한 후 호스트에서.

먼저 호스트에서 컨테이너의 프로세스 ID(컨테이너 내부에서 실행 중인 셸 또는 응용 프로그램일 수 있음)를 찾습니다.그런 다음 컨테이너의 네트워크 네임스페이스로 변경합니다(다음과 같이 실행).root호스트):

host# PS1='container# ' nsenter -t <PID> -n

수정하기PS1환경 변수는 컨테이너의 네트워크 네임스페이스에 있는 동안 다른 프롬프트를 표시하는 데만 사용됩니다.

이제 사용할 수 있습니다.ping,netstat,ifconfig,ip등(호스트에 설치되어 있는 경우)

container# ping <IP>
container# ip route get <IP>
....
container# exit

네트워크 마운트 파일 하지 않을 수 ./etc/hosts호스트의 파일)

언급URL : https://stackoverflow.com/questions/39901311/docker-ubuntu-bash-ping-command-not-found

반응형