いくつかの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 ...
(適切なサフィックスを含む、例えば :z
SELinuxが有効な場合)。
docker --version
ソケットがないと動作しません。必要Dockerソケット/var/run/docker.sock
がない場合は、デーモンに接続せずにツールのバージョンを返します。コンテナのスクリプトは別のdocker
コマンドを実行する必要があります。