DockerでGoogle Chromeをインストールする方法
問題点
Dockerコンテナ内でGoogle Chromeをインストールする際、以下のコマンドを使用すると依存関係の問題が発生します:
RUN apt-get install -y wget
RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i google-chrome-stable_current_amd64.deb # ここで問題発生
RUN apt -f install -y
dpkg -i
コマンドが依存関係のエラーで失敗し、Dockerのビルドプロセスが停止してしまいます。インタラクティブに実行すれば次のコマンドで修正できますが、Dockerビルド中はこのエラーによりプロセスが中断されます。
解決策
方法1: apt-getを使用したインストール(推奨)
.deb
ファイルをダウンロードした後、dpkg
の代わりにapt-get install
を使用することで、依存関係を自動的に解決できます:
RUN apt-get update && apt-get install -y wget
RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get install -y ./google-chrome-stable_current_amd64.deb
方法2: Googleリポジトリを追加する方法
公式リポジトリを追加してインストールする方法もあります:
RUN apt-get update && apt-get install -y wget gnupg
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get -y install google-chrome-stable
WARNING
注意: 新しいDebian/Ubuntuバージョンではapt-key
コマンドが非推奨となっています。代わりに以下の方法を使用してください:
RUN apt-get update && apt-get install -y wget
RUN mkdir -p /etc/apt/keyrings
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /etc/apt/keyrings/google.gpg
RUN echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google.gpg] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
RUN apt-get update && apt-get -y install google-chrome-stable
完全なDockerfile例
Ubuntuベースの例
FROM ubuntu:22.04
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
wget \
gnupg \
curl \
&& rm -rf /var/lib/apt/lists/*
# Chromeのインストール(方法1)
RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get update && apt-get install -y ./google-chrome-stable_current_amd64.deb
RUN rm google-chrome-stable_current_amd64.deb
# 確認
RUN echo "Chrome version: " && google-chrome --version
Node.js環境での例
FROM node:18
# Chromeの依存関係をインストール
RUN apt-get update && apt-get install -y \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libgbm1 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
xdg-utils \
&& rm -rf /var/lib/apt/lists/*
# Chromeのインストール
RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get update && apt-get install -y ./google-chrome-stable_current_amd64.deb
RUN rm google-chrome-stable_current_amd64.deb
Seleniumでの使用例
SeleniumでChromeを使用する場合、追加の設定が必要です:
FROM python:3.11
# システムパッケージのインストール
RUN apt-get update && apt-get install -y \
wget \
gnupg \
&& rm -rf /var/lib/apt/lists/*
# Chromeのインストール
RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get update && apt-get install -y ./google-chrome-stable_current_amd64.deb
RUN rm google-chrome-stable_current_amd64.deb
# no-sandboxモード用のユーザー追加(セキュリティ対策)
RUN groupadd -r chromeuser && useradd -r -g chromeuser -G audio,video chromeuser \
&& mkdir -p /home/chromeuser/Downloads \
&& chown -R chromeuser:chromeuser /home/chromeuser
USER chromeuser
# Pythonパッケージのインストール
COPY requirements.txt .
RUN pip install -r requirements.txt
TIP
セキュリティ上の理由から、Dockerコンテナ内でChromeを実行する場合は--no-sandbox
フラグが必要な場合があります。ただし、これはセキュリティリスクを伴うため、代わりに非特権ユーザーを作成することを推奨します。
トラブルシューティング
依存関係エラーが発生する場合
一部の環境では、明示的に依存関係をインストールする必要があります:
RUN apt-get update && apt-get install -y \
libnss3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libdbus-1-3 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrandr2 \
libgbm1 \
libasound2 \
libpangocairo-1.0-0
最新のChrome for Testingを使用する方法
常に最新の安定版Chromeをインストールする方法:
# 最新のChromeバージョンを取得してインストール
RUN CHROME_VERSION=$(curl -sSL https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json | grep -o '"version": "[^"]*' | head -1 | cut -d'"' -f4) \
&& CHROME_URL="https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION}/linux64/chrome-linux64.zip" \
&& curl -sSL ${CHROME_URL} -o /tmp/chrome-linux64.zip \
&& unzip -q /tmp/chrome-linux64.zip -d /opt \
&& ln -s /opt/chrome-linux64/chrome /usr/bin/google-chrome \
&& rm /tmp/chrome-linux64.zip
まとめ
Dockerコンテナ内でGoogle Chromeをインストールするには、主に2つの方法があります:
- .debパッケージをダウンロードしてapt-getでインストール - 依存関係の自動解決
- 公式リポジトリを追加してインストール - 常に最新版を維持可能
dpkg -i
コマンドを使用すると依存関係エラーが発生するため、代わりにapt-get install ./package.deb
を使用することを推奨します。これにより、依存関係が自動的に解決され、Dockerビルドが中断されるのを防げます。