问题描述
在一个PHP(Drupal)项目中使用headless Chrome / Chromium渲染PDF。在Docker开发环境中无法正常工作,但在专用验收服务器上可以正常运行。问题出现在Docker环境中,用户运行Docker(桌面版)在WSL2上的Windows 10机器上,并使用docker-compose配置项目。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
1. 安装Chromium
用户已经尝试使用wodby/drupal-php
镜像和selenium/standalone-chrome
镜像,但遇到问题。为了解决这个问题,用户决定在自定义的PHP容器中安装Chromium。以下是安装Chromium的步骤:
在Dockerfile中添加以下命令来安装Chromium:
ARG PHP_TAG
FROM wodby/drupal-php:${PHP_TAG}
USER root
RUN apk update; \
apk upgrade; \
apk add chromium;
2. 确认网络别名
为了确保从PHP容器中可以调用开发域名,用户在docker-compose.yml
中为nginx容器添加了网络别名。以下是确认网络别名的步骤:
在docker-compose.yml
中为nginx容器添加网络别名:
nginx:
...
networks:
default:
aliases:
- somedomain.site
3. 排查Chromium无响应问题
用户发现当使用Curl测试域名时,一切正常。但是,使用Chromium时,URL没有响应。对于外部域名(如https://devops.stackexchange.com/),Chromium工作正常。这可能是因为Chromium使用了一种与Docker域名不兼容的DNS。下面是解决Chromium无响应问题的步骤:
首先,尝试使用Chromium的命令行参数来运行headless Chromium,并查看是否有错误消息输出。以下是使用Chromium的命令行参数来测试域名的示例:
chromium-browser --headless --no-sandbox --dump-dom http://somedomain.site/
用户注意到以下警告消息:[0727/124526.452320:WARNING:dns_config_service_posix.cc(342)] Failed to read DnsConfig。这可能是问题的原因。虽然用户尝试了一个其他的Docker镜像来解决这个问题,但这个镜像也遇到了相同的问题。
4. 解决DNS配置问题
为了解决DNS配置问题,需要进一步调查。用户可以尝试以下步骤:
- 确保Docker容器可以访问主机网络。如果Docker容器无法访问主机网络,可以考虑检查Docker网络配置。
- 检查Chromium在Docker容器中的DNS设置,确保它能够正确解析Docker域名。
- 尝试更新Chromium或相关组件的版本,以解决可能存在的问题。
5. 查找更多解决方案
如果上述步骤无法解决问题,用户可以继续查找其他解决方案。用户已经在Stack Overflow上找到一个相关的讨论(https://stackoverflow.com/questions/54838341/running-headless-chromium-browser-throws-error-failed-to-read-dnsconfig-insid),但这个解决方案在他的情况下并没有有效。
用户可以在相关论坛、社区或Docker的官方文档中寻找更多关于Chromium在Docker中使用的问题以及相应的解决方案。
参考链接
注意事项
- 用户需要确保自己的Docker环境与所提供的示例代码一致,特别是Docker版本和所使用的镜像。
- 在更新版本或进行任何更改之前,请务必备份相关配置和数据。