Хром / Хром внутри Докера и песочницы - PullRequest
0 голосов
/ 30 августа 2018

Я бы хотел запустить Chromium в контейнере, и у меня возникли проблемы с песочницей. Я использую «сырые сборки» Chromium (не загружается через менеджер пакетов, но это не должно иметь значения, fwiw). Вот минимальный Dockerfile, который проиллюстрирует мою проблему:

FROM ubuntu:16.04

RUN set -ex; \
    apt-get update; \
    apt-get install curl unzip gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget -y;

RUN set -ex; \
# download and install Chromium build, set permissions
    curl -o /tmp/chromium-download.zip https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/561732/chrome-linux.zip; \
    unzip -d /opt /tmp/chromium-download.zip; \
    chmod -R go=u-w /opt/chrome-linux; \
# create 'chrome' group and user
    groupadd --system chrome; \
    useradd --system --create-home --gid chrome --groups audio,video chrome; \
# Advice re. SUID sandbox in 'Installation instructions for “Raw builds of Chromium”':
# https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md#installation-instructions-for-raw-builds-of-chromium
    chown root:root /opt/chrome-linux/chrome_sandbox; \
    chmod 4755 /opt/chrome-linux/chrome_sandbox;

ENV CHROME_DEVEL_SANDBOX="/opt/chrome-linux/chrome_sandbox"
USER chrome
ENV PATH="${PATH}:/opt/chrome-linux"

Создайте его и попытайтесь запустить:

$ docker build . -t chromium
$ docker run -it chromium:latest chrome --headless

И я получаю следующую ошибку:

[0830/122656.151751:FATAL:zygote_host_impl_linux.cc(127)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.

Самая распространенная мантра по устранению неполадок (например, здесь ; другой проект, но та же проблема): «Просто добавьте --no-sandbox и все готово». Это действительно работает.

Однако официальные источники не рекомендуют этого и утверждают, что это «не нужно, если вы правильно настроили пользователя в контейнере». (См. здесь ). По моему мнению, пользователь внутри контейнера создан правильно, и я дополнительно последовал совету по настройке разрешений для песочницы SUID (чья реальная роль мне не ясна, эта страница говорит: «Linux Песочница SUID почти, но не полностью удалена ». Что бы это ни значило на практике).

Есть ли шанс запустить это без отключения песочницы? (поскольку это используется для тестирования, в идеале мне бы хотелось сохранить поведение песочницы, поскольку я хочу максимально близко имитировать «естественную» среду)

1 Ответ

0 голосов
/ 14 декабря 2018

Включить пользовательские пространства имен в вашем ядре. >> другая соответствующая тема << </p>

...