运行 当 docker 宿主 windows 时,docker 容器中的木偶操纵者
Run puppeteer headful in docker container when the docker host is windows
我已经 docker 化了两项服务:
- web 前端(包含 angular 中的 gui,在端口 3000 上访问)
- 后端(具有 puppeteer 依赖性,用于从 8111 端口访问的网页中提取数据)
以下是后端的简化版本docker文件:
FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...
USER root:root
COPY ./backend /node/backend
WORKDIR /node/backend
RUN npm install --unsafe
CMD npm start
EXPOSE 8011
他们通过 sock.io
.
相互交流
后端有两种 运行 提取模式(无头和有头)。无外设提取成功地与这些 docker 化服务一起工作。
当 运行 在本地连接后端时,headful 提取会弹出包含正在处理的页面的 Web 浏览器。当在 dockerized 后端启用有头提取时失败,因为容器没有 GUI。
为了修复后端的 headful 提取,我修改了下面的 docker 文件:
FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...
# Adding dependecies that are needed to create fake display in container
RUN apt-get update &&\
apt-get install -yq gconf-service libasound2 libatk1.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 \
xvfb x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps
USER root:root
COPY ./backend /node/backend
WORKDIR /node/backend
RUN npm install --unsafe
# Creating display
ENV DISPLAY :99
# CMD npm start
CMD Xvfb :99 -screen 0 1024x768x16 & npm start
EXPOSE 8011
我 运行 在没有网络隔离的情况下安装两个容器,如下所示:
docker run --network host web
docker run --network host --env="DISPLAY" backend
进行这些更改后,headful 提取成功,但浏览器 windows 未弹出。
- 为什么浏览器 windows 没有弹出?
- 这应该也适用于无法移除网络隔离的 Windows 主机。是否可以在不移除网络隔离的情况下实现将浏览器从容器弹出到宿主机?
亲切的问候,
兰多.
P.S
我试图实现 运行 在主机容器内启动的 Web 浏览器的 GUI,其中主机是 Windows。我需要知道是否有可能在容器为 Linux 且主机为 Windows 并且无法移除网络隔离(net=host
)的情况下实现此目的。
- 浏览器 window 没有弹出,因为 xvfb 是一个虚拟帧缓冲区。也就是说,它在容器内模拟一个屏幕。如果您想查看容器内的浏览器 window,您可以使用
x11vnc
,这将允许您查看容器显示内正在发生的事情。 This 问题对如何实现这一点有很好的答案。
Step-by-Step Guide 关于如何 vnc 进入 docker 容器 运行 xvfb.
- 不,那是不可能的 - 如果您想在主机上使用浏览器,运行 在容器中这样做有什么意义?
我已经 docker 化了两项服务:
- web 前端(包含 angular 中的 gui,在端口 3000 上访问)
- 后端(具有 puppeteer 依赖性,用于从 8111 端口访问的网页中提取数据)
以下是后端的简化版本docker文件:
FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...
USER root:root
COPY ./backend /node/backend
WORKDIR /node/backend
RUN npm install --unsafe
CMD npm start
EXPOSE 8011
他们通过 sock.io
.
后端有两种 运行 提取模式(无头和有头)。无外设提取成功地与这些 docker 化服务一起工作。
当 运行 在本地连接后端时,headful 提取会弹出包含正在处理的页面的 Web 浏览器。当在 dockerized 后端启用有头提取时失败,因为容器没有 GUI。
为了修复后端的 headful 提取,我修改了下面的 docker 文件:
FROM private/node:v10.22.1
# Dependencies needed for backend (removed for simplicity)
RUN apt-get update
RUN apt-get install -y ...
# Adding dependecies that are needed to create fake display in container
RUN apt-get update &&\
apt-get install -yq gconf-service libasound2 libatk1.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 \
xvfb x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps
USER root:root
COPY ./backend /node/backend
WORKDIR /node/backend
RUN npm install --unsafe
# Creating display
ENV DISPLAY :99
# CMD npm start
CMD Xvfb :99 -screen 0 1024x768x16 & npm start
EXPOSE 8011
我 运行 在没有网络隔离的情况下安装两个容器,如下所示:
docker run --network host web
docker run --network host --env="DISPLAY" backend
进行这些更改后,headful 提取成功,但浏览器 windows 未弹出。
- 为什么浏览器 windows 没有弹出?
- 这应该也适用于无法移除网络隔离的 Windows 主机。是否可以在不移除网络隔离的情况下实现将浏览器从容器弹出到宿主机?
亲切的问候, 兰多.
P.S
我试图实现 运行 在主机容器内启动的 Web 浏览器的 GUI,其中主机是 Windows。我需要知道是否有可能在容器为 Linux 且主机为 Windows 并且无法移除网络隔离(net=host
)的情况下实现此目的。
- 浏览器 window 没有弹出,因为 xvfb 是一个虚拟帧缓冲区。也就是说,它在容器内模拟一个屏幕。如果您想查看容器内的浏览器 window,您可以使用
x11vnc
,这将允许您查看容器显示内正在发生的事情。 This 问题对如何实现这一点有很好的答案。
Step-by-Step Guide 关于如何 vnc 进入 docker 容器 运行 xvfb.
- 不,那是不可能的 - 如果您想在主机上使用浏览器,运行 在容器中这样做有什么意义?