Skip to content

DockerでGoogle Chromeをインストールする方法

問題点

Dockerコンテナ内でGoogle Chromeをインストールする際、以下のコマンドを使用すると依存関係の問題が発生します:

dockerfile
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を使用することで、依存関係を自動的に解決できます:

dockerfile
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リポジトリを追加する方法

公式リポジトリを追加してインストールする方法もあります:

dockerfile
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コマンドが非推奨となっています。代わりに以下の方法を使用してください:

dockerfile
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ベースの例

dockerfile
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環境での例

dockerfile
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を使用する場合、追加の設定が必要です:

dockerfile
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フラグが必要な場合があります。ただし、これはセキュリティリスクを伴うため、代わりに非特権ユーザーを作成することを推奨します。

トラブルシューティング

依存関係エラーが発生する場合

一部の環境では、明示的に依存関係をインストールする必要があります:

dockerfile
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をインストールする方法:

dockerfile
# 最新の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つの方法があります:

  1. .debパッケージをダウンロードしてapt-getでインストール - 依存関係の自動解決
  2. 公式リポジトリを追加してインストール - 常に最新版を維持可能

dpkg -iコマンドを使用すると依存関係エラーが発生するため、代わりにapt-get install ./package.debを使用することを推奨します。これにより、依存関係が自動的に解決され、Dockerビルドが中断されるのを防げます。