如何解决如何在两个不同的 docker 镜像中运行 Browsershot 和 zenika alpine-chrome?
目标
像服务一样使用 zenika alpine-chrome:with-puppeteer docker 图像,在 PHP 容器中使用 Browsershot 从 HTML 创建 PDF。
说明
在我的 dockerized PHP 应用程序中,我从 html 生成 pdf 文件。目前在 docker PHP 镜像中还安装了 npm、nodejs、puppeteer 和 Chromium 并且 browsershot 可以工作。但我想为 npm/nodejs/puppeteer/chromium 东西有一个单独的图像。因此我尝试了zenika alpine-chrome:with-puppeteer。
我将这个 docker 镜像的 /usr
目录安装到我的 PHP docker 镜像中,当我执行到 PHP 容器时,我可以验证它是否有效。所以我可以看到所有必要的文件,如 node
、chromium-browser
或 npm
。
问题
目前我没有从 browsershot 得到任何反馈。我尝试使用 xdebug 对其进行调试,但我没有收到任何错误消息,并且该过程只会填满我的 RAM,直到我的主机卡住为止。
问题
通常是否可以挂载文件夹并在那里执行进程,还是仅用于“文件共享”?
如果可能,权限如何?如何处理?
指向浏览器快照中的二进制文件和路径的正确方法是什么?
Dockerfile (PHP_dockerfile)
...
FROM PHP:8.0.2-fpm-alpine AS PHP-base
ENV PUPPETEER_EXECUTABLE_PATH="usr/src/chrome/bin/chromium-browser"
...
...
FROM zenika/alpine-chrome:with-puppeteer AS chromium
...
docker-compose.yaml
volumes:
...
volume-chrome:
...
...
chrome:
container_name: ${COMPOSE_PROJECT_NAME}_${APP_ENVIRONMENT}_chrome
build:
context: ./..
target: chromium
<<: *PHP_dockerfile
volumes:
- volume-chrome:/usr
security_opt:
- seccomp:./scripts/dev/chrome/chrome.json
restart: always
command: [ chromium-browser,"--headless","--disable-gpu","--no-sandBox","--remote-debugging-address=0.0.0.0","--remote-debugging-port=9222" ]
ports:
- "9222:9222"
networks:
- backend_net
...
...
PHP:
container_name: ${COMPOSE_PROJECT_NAME}_${APP_ENVIRONMENT}_PHP
build:
context: ./..
target: PHP-dev
<<: *PHP_dockerfile
volumes:
- volume-data:/var/www/${APP_DOMAIN}/current
- type: volume
target: /usr/src/chrome
source: volume-chrome
environment: &PHP_env
networks:
- backend_net
...
$pdf = $this->browsershot
->noSandBox()
->setIncludePath('$PATH:/usr/src/chrome/bin')
->setNodeModulePath('/usr/src/chrome/src/app/node_modules/')
->setChromePath('usr/src/chrome/bin/chromium-browser')
->setNodeBinary('usr/src/chrome/bin/node')
->setNpmBinary('usr/src/chrome/bin/npm')
->showBackground()
->setoption('addStyleTag',$this->getStyleSheet())
->format('A4')
->margins(0.0,0.0,0.0)
->setHtml($html)
)->pdf();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。