Docker 명령은 bash 스크립트에서 실행할 수 없습니다

Docker 명령은 bash 스크립트에서 실행할 수 없습니다

일부 bash 스크립트에 대한 런타임 환경을 구축하는 Dockerfile이 있는데 현재 다음과 같습니다.

FROM debian:buster-slim

RUN apt-get update
RUN apt-get upgrade

RUN apt-get install curl -y

# Install MySQL tools
RUN apt-get install default-mysql-client -y

# Install AWS CLI v2
RUN apt-get install awscli -y

# Install Docker
RUN curl -fsSL https://get.docker.com -o get-docker.sh
RUN chmod +x ./get-docker.sh
RUN ./get-docker.sh
RUN rm get-docker.sh

# Copy jobs into container
WORKDIR /

COPY ./docker-entrypoint.sh /

ENTRYPOINT ["/docker-entrypoint.sh"]

스크립트 docker-entrypoint.sh에는 다음이 포함됩니다.

#!/bin/bash

docker --version
/jobs/$1/run.sh

마지막으로 실행 중인 작업( run.sh궁극적으로 실행되는 스크립트 docker-entrypoint.sh)은 다음과 같습니다.

#!/bin/bash
docker --version

docker --version내부의 첫 번째 실행은 docker-entrypoint.sh예상대로 작동하고 Docker 버전을 출력합니다. 두 번째 실행이 run.sh다음 메시지와 함께 실행되지 않습니다.

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

어떤 이유로 내부 스크립트는 docker 데몬에 액세스할 수 없는 것 같지만 외부 스크립트는 액세스할 수 있습니다.

./docker-entrypoint.sh [job-name]흥미롭게도 실제로 Docker 컨테이너 내부가 아닌 로컬로 실행 하면 두 실행 모두에서 예상되는 출력을 얻습니다.

왜 이런 일이 발생하는지 설명하고 해결하는 데 도움을 줄 수 있는 사람이 있나요?

답변1

Docker 소켓은 실행 중인 컨테이너 내에서 자동으로 사용할 수 없습니다. 명시적으로 설치해야 합니다.

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

(적절한 접미사 포함,예를 들어 :zSELinux가 활성화된 경우).

docker --version소켓이 없으면 작동하지 않습니다.필요Docker 소켓 /var/run/docker.sock이 없으면 데몬에 연결하지 않고 도구 버전을 반환합니다. 컨테이너의 스크립트는 다른 docker명령을 실행해야 합니다.

관련 정보