首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用chromiuim的docker官方dind构建(docker:最新)

使用chromiuim的docker官方dind构建(docker:最新)
EN

Stack Overflow用户
提问于 2017-11-24 17:02:10
回答 0查看 739关注 0票数 1

在过去的两天里,我一直在尝试在docker :最新的docker image上安装并运行chromuim。(docker在docker中)。

我已经尝试了多个docker文件:

代码语言:javascript
复制
from docker:latest

RUN apk add --no-cache python py2-pip curl bash chromuim ttf-freefont xvfb nodejs nodejs-npm udev    
RUN curl -sSL https://sdk.cloud.google.com | bash
ENV PATH $PATH:~/google-cloud-sdk/bin

RUN pip install docker-compose
RUN npm install -g @angular/cli swagger 
ENV CHROME_BIN=/usr/bin/chromium-browser

这安装了chrome 57,它不支持headless。所以我想我可以用xvbf来运行它,但是运行这个chrome会失败,并显示:

代码语言:javascript
复制
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
[8:8:1124/085514.600081:FATAL:zygote_host_impl_linux.cc(182)] Check failed: ReceiveFixedMessage(fds[0], kZygoteBootMessage, sizeof(kZygoteBootMessage), &boot_pid). 
Aborted (core dumped)

所以我试着安装了chrome 61 (支持headless)。但要做到这一点,您需要更新Dockerfile以使用edge。我试图立即升级/或安装61。我总是弄丢字体。我得到的最接近的结果是调整我的dockerfile以使用轻量级的。

代码语言:javascript
复制
from docker:latest

RUN apk add --no-cache python py2-pip curl bash xvfb nodejs nodejs-npm udev    
RUN curl -sSL https://sdk.cloud.google.com | bash
ENV PATH $PATH:~/google-cloud-sdk/bin

RUN pip install docker-compose
RUN npm install -g @angular/cli swagger 
ENV CHROME_BIN=/usr/bin/chromium-browser

USER root

RUN echo "http://dl-2.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories
RUN echo "http://dl-2.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN echo "http://dl-2.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

#-----------------
# Set ENV and change mode
#-----------------
ENV LIGHTHOUSE_CHROMIUM_PATH /usr/bin/chromium-browser

ENV TZ "Europe/Berlin"
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
ENV SCREEN_WIDTH 750
ENV SCREEN_HEIGHT 1334
ENV SCREEN_DEPTH 24
ENV DISPLAY :99.0
ENV PATH /lighthouse/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ENV GEOMETRY "$SCREEN_WIDTH""x""$SCREEN_HEIGHT""x""$SCREEN_DEPTH"

RUN echo $TZ > /etc/timezone

#-----------------
# Add packages
#-----------------

RUN apk -U --no-cache update
RUN apk -U --no-cache add \
    zlib-dev \
    chromium \
    freetype \
    ttf-opensans \
    xvfb \
    wait4ports \
    xorg-server \
    dbus \
    ttf-freefont \
    mesa-dri-swrast


# Minimize size

RUN apk del --purge --force curl make gcc g++ python linux-headers binutils-gold gnupg git zlib-dev apk-tools libc-utils

RUN rm -rf /var/lib/apt/lists/* \
    /var/cache/apk/* \
    /usr/share/man \
    /tmp/* \
    /usr/lib/node_modules/npm/man \
    /usr/lib/node_modules/npm/doc \
    /usr/lib/node_modules/npm/html \
    /usr/lib/node_modules/npm/scripts

VOLUME /lighthouse/output

ADD xvfb-chromium.sh /chromium-xvfb.sh
RUN chmod +x /chromium-xvfb.sh

xvfb-chromium.sh (虽然不需要,因为您可以将run /bin/bash停靠到容器中)

代码语言:javascript
复制
#!/bin/sh

_kill_procs() {
  kill -TERM $chromium
  wait $chromium
  kill -TERM $xvfb
}

parameters=$@


# We need to test if /var/run/dbus exists, since script will fail if it does not

[ ! -e /var/run/dbus ] && mkdir /var/run/dbus

/usr/bin/dbus-daemon --system

# Setup a trap to catch SIGTERM and relay it to child processes
trap _kill_procs SIGTERM

TMP_PROFILE_DIR=`mktemp -d -t chromium.XXXXXX`
export CHROME_DEBUGGING_PORT=9222

# Start Xvfb
Xvfb ${DISPLAY} -ac +iglx -screen 0 ${GEOMETRY} -nolisten tcp & xvfb=$!

printf "Starting xvfb window server..."

while [  1 -gt $xvfb  ]; do printf "..."; sleep 1; done

printf "xvfb started\n\n"

#printf "Starting chromium, with debugger on port $CHROME_DEBUGGING_POST...\n\n"

# --disable-webgl \

$CHROME_BIN \
--no-sandbox \
--user-data-dir=${TMP_PROFILE_DIR}  \
--start-maximized \
--remote-debugging-port=${CHROME_DEBUGGING_PORT} \
--no-first-run "about:blank" &

#chromium=$!

#wait4ports tcp://127.0.0.1:$CHROME_DEBUGGING_PORT

printf "\n\n==============================\nlaunching lighthouse run\n==============================\n\n"

#wait $chromium
wait $xvfb

然后我得到了另一个错误:

代码语言:javascript
复制
Error relocating /usr/lib/chromium/chrome: FT_Set_Default_Properties: symbol not found

不知道如何解决这个问题,任何帮助都将不胜感激。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47469692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档