내 호스트 컴퓨터의 셸(사용자 지정 항목 포함)을 Docker 인스턴스와 함께 사용할 수 있나요?

내 호스트 컴퓨터의 셸(사용자 지정 항목 포함)을 Docker 인스턴스와 함께 사용할 수 있나요?

일반적으로 를 통해 도커 인스턴스에 연결하면 다음과 같은 매우 원시적인 상황 docker exec에 빠지게 됩니다 .shash

더 나은 것을 원한다면 docker 인스턴스에 직접 설치해야 합니다.

그러나 내가 올바르게 본다면 쉘에서 내가 원하는 것은 바이너리를 실행하고 stdin 및 stdout을 리디렉션하는 것뿐입니다. 셸이 내 호스트 컴퓨터에 존재하고, pwd도커 컨테이너에 대한 권한이 있고, 도커 컨테이너와 내 호스트의 바이너리에 액세스할 수 있는 것이 불가능합니까 ?

이는 순전히 개발/디버깅 목적이므로 이를 달성하기 위해 보안 기능을 비활성화해야 한다면 허용됩니다.

이것이 쉬운 일입니까? 그렇지 않다면, 주요 장애물은 무엇입니까?

답변1

귀하의 질문을 올바르게 이해했다면 호스트 시스템에서와 마찬가지로 도커 컨테이너에서 동일한 셸과 동일한 구성을 사용하고 싶을 것입니다.

볼륨을 사용하여 실제로 결합할 수 있지만 100% 올바르게 작동하도록 하는 것은 어렵고 혼란스러울 것입니다. 이를 설치하고 호스트에서 구성을 복사하는 것이 좋습니다.

호스트가 셸로 사용되고 bash우분투 기반 이미지에서 생성된 컨테이너를 사용하려고 한다고 가정해 보겠습니다.foo:latest

이 경우 다음을 생성할 수 있습니다 Dockerfile.

FROM foo:latest
RUN apt-get update && apt-get -y install bash
COPY .bashrc /root/.bashrc
COPY .profile /root/.profile

지금:

  • 디렉터리 생성newimage
  • .bashrchomedir에서 .profile이 디렉토리로 복사하세요.
  • 이 디렉토리로 이동하여 실행하십시오.docker build -t foo:withbash

foo:withbash이제 bash 와 동일한 이미지가 생성되지만 foo:latest호스트 시스템의 bash 구성도 갖게 됩니다.

(다른 셸, Centos 및 기타 배포판에서도 동일한 트릭을 사용할 수 있지만 zshDockerfile의 명령은 약간 다릅니다.)

편집하다: 몇 가지 참고사항:

  • 내 dockerfile에서는 귀하가 컨테이너의 루트라고 가정합니다(일반적으로 그렇습니다). 이 컨테이너의 루트가 아닌 경우 이러한 파일이 올바른 디렉터리에 복사되도록 마지막 두 줄을 변경해야 할 수도 있습니다.
  • 두 번째 줄은 Debian, Ubuntu 또는 유사한 배포판을 기반으로 하는 모든 Docker 이미지에 적용됩니다.
    CentOS 또는 유사한 배포판을 기반으로 하는 경우 다음을 원할 것입니다. yum -y update && yum -y install bash
    Alpine을 기반으로 하는 경우 다음을 원할 것입니다.RUN apk add --no-cache bash
  • zsh를 라인 2와 3 bash으로 변경하려면zsh

관련 정보