我已经dockerized了两个服务:
- web前端(包含在端口3000上访问的angular gui)
- 后端(依赖于从端口8111访问的网页提取数据)
下面是后端dockerfile的简化版本:
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
相互通信。
后端有两种模式运行提取(headless和headful)。无头提取可以成功地与这些dockerized服务一起工作。
在本地运行后端时,它会弹出包含正在处理的页面的web浏览器。当在dockerized后端启用headful提取时,由于容器没有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
经过这些更改后,头部提取工作成功,但浏览器窗口不弹出。
- 为什么浏览器窗口不弹出?
- 对于无法移除网络隔离的Windows主机也应该能够工作。是否有可能在不移除网络隔离的情况下实现从容器到主机的浏览器弹出?
亲切的问候,金兰。
p。S
我试图实现运行在主机是Windows的主机的容器内启动的web浏览器的GUI。我需要知道是否有可能实现这一点,其中容器是Linux,主机是Windows,并且不可能消除网络隔离(net=host
)。
- 浏览器窗口没有弹出,因为xvfb是一个虚拟帧缓冲区。也就是说,它在容器内模拟一个屏幕。如果你想看到容器内部的浏览器窗口,你可以使用
x11vnc
,这将允许你看到容器显示内部发生了什么。关于如何实现这一目标,这个问题有很好的答案。
如何vnc进入运行xvfb的docker容器的分步指南。
- 不,这是不可能的-如果你想在主机上使用浏览器,在容器中运行这个有什么意义?