运行 使用 Docker 图片的量角器脚本

Running protractor scripts using Docker Image

我正在尝试 运行 我的量角器脚本使用 docker image(Dockerfile) 。 同样,我将基础图像用作 alpine ,并使用 COPY 命令复制我的工作代码。 我的 docker 图片如下所示,但我不确定如何将 chrome 浏览器安装到其中,因为它在 运行 测试执行命令时失败。

FROM node
RUN mkdir src
COPY ./_pages /src/_pages
COPY ./_tests /src/_tests
COPY ./config /src/config
COPY ./reports /src/reports
COPY ./resources /src/resources
COPY ./src /src/src
COPY ./test_suites /src/test_suites
COPY package.json /src/package.json
COPY tsconfig.json /src/tsconfig.json
COPY tslint.json /src/tslint.json
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN  sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get -y install google-chrome-stable
WORKDIR /src
RUN npm install
RUN npm run webdriver-update
RUN npm run webdriver-update-local
RUN npm run build
RUN apt-get install openjdk-8-jdk
ENTRYPOINT npm test

当我构建+运行这个图像和运行 npm test命令来执行脚本。它给了我以下错误(因为没有 chrome 驱动程序存在):

[15:32:59] I/launcher - Running 1 instances of WebDriver
[15:32:59] I/local - Starting selenium standalone server...
[15:33:01] I/local - Selenium standalone server started at http://172.17.0.11:47860/wd/hub
[15:33:21] E/launcher - Timed out waiting for driver server to start.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'c9699349ca76', ip: '172.17.0.11', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_232'
Driver info: driver.version: unknown
[15:33:21] E/launcher - WebDriverError: Timed out waiting for driver server to start.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'c9699349ca76', ip: '172.17.0.11', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_232'
Driver info: driver.version: unknown

谁能建议我如何添加命令来安装 chrome 作为 docker 映像的一部分?

如何使用具有所有必要依赖项的基础映像,例如protractor-headless?

此错误可能有两个原因:

1) 您可能没有在 chrome 功能中设置 "--disable-dev-shm-usage", "--no-sandbox" 标志,因此您的服务器未启动 docker 不支持此功能。

2) 尝试通过设置 directConnect: true

直接连接到 chrome 而无需使用 selenium 服务器

3) 安装chrome相关的依赖,可以使用如下命令:

ENV CHROME_PACKAGE="google-chrome-stable_current_amd64.deb"

RUN echo "deb http://ftp.debian.org/debian stretch main" >> /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y wget sudo && \
    apt-get -f install -y -t stretch openjdk-8-jre-headless ca-certificates-java && \
    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
    dpkg --unpack ${CHROME_PACKAGE} && \
    apt-get install -f -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* \
    rm ${CHROME_PACKAGE}

确保 运行 您的 docker 图像带有特权标志,并将 dev/shm 传送到 .a 卷。