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バージョンを出力します。 2番目の実行は、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コマンドを実行する必要があります。

おすすめ記事