问题:在创建PDF时放入的任何URL,MPDF都无法找到它(引发异常)。
第一个月
我在这个应用程序中有Web和API,奇怪的是,我的Web应用程序HTML可以找到这些图像。
我使用http://127.0.0.1:8000/
作为基本URL来访问我的应用程序和API。
- 图片位于
ROOT_DIR/public/uploads/report_templates/logo/logo-white.png
- Web可以通过
http://127.0.0.1:8000/uploads/report_templates/logo/logo-white.png
看到这个。
Things I Found
- 可以找到任何外部URL,如
https://www.google.pl/images/srpr/logo11w.png
。 - 如果我把绝对路径,而不是URL,它被发现(不能诉诸这一坚韧,因为这是一个冗长的报告。)
- 在
http://127.0.0.1:8000/uploads/report_templates/logo/logo-white.png
的容器中使用curl
表示为Failed to connect to 127.0.0.1 port 8000: Connection refused
我明白,我在第三点请求进入我自己的容器中做错了。但是在web中找不到任何特定的东西,对docker来说太新了,无法想到我自己的东西。
我正在寻找一个正确的方法来处理这个在码头。
.env
...
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://127.0.0.1:8000/
...
字符串
docker-compose.yml
version: "3.7"
services:
app:
build:
args:
user: daniyalnasir
uid: 1001
context: ./
dockerfile: Dockerfile
image: f-scope
container_name: f-scope-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
f-scope:
db:
image: mysql:5.7
container_name: f-scope-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
# MYSQL_USER: ${DB_USERNAME}
# MYSQL_ALLOW_EMPTY_PASSWORD: 1
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata1:/var/lib/mysql
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
f-scope:
ipv4_address: 172.24.2.1
nginx:
image: nginx:alpine
container_name: f-scope-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./public/uploads:/var/www/public/uploads
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
f-scope:
networks:
f-scope:
driver: bridge
ipam:
driver: default
config:
- subnet: "172.24.2.0/16"
volumes:
dbdata1:
型
Dockerfile
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
libgd-dev \
libzip-dev \
zip \
sendmail \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip
# Configure sendmail path
RUN echo "sendmail_path=/usr/sbin/sendmail -t -i" >> /usr/local/etc/php/conf.d/sendmail.ini
#RUN sed -i '/#!\/bin\/sh/aservice sendmail restart' /usr/local/bin/docker-php-entrypoint
#RUN sed -i '/#!\/bin\/sh/aecho "$(hostname -i)\t$(hostname) $(hostname).localhost" >> /etc/hosts' /usr/local/bin/docker-php-entrypoint
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user
型
HTML
<img src="{{url("uploads/report_templates/logo/logo-white.png")}}" style="width: 250px; height:80px; margin: 70px 0px 40px 30px;" alt="" />
型
用于上下文
我正在使用MPDF创建一个带有图片URL的PDF(* 指向我的应用程序的公共文件夹 *)。它在我的常规LAMP环境中工作正常。
但是,为了学习,我决定在我的本地机器 (运行ubuntu) 上的docker容器中创建和运行这个应用程序。一切都在这个docker环境中正常工作,除了这一件事。
1条答案
按热度按时间bhmjp9jg1#
在开发环境中使用Docker时,适当配置用于相对src和href属性的
basepath
以确保可访问性至关重要。在您提供的上下文中,Mpdf试图通过http://yourapp.test:8000/uploads/report_templates/logo/logo-white.png
访问镜像,但nginx容器无法解析主机(yourapp.test
)并在端口8000上建立连接。因此,
basepath
应该配置为“localhost”、“127.0.0.1“或容器的本地IP地址。字符串
如果nginx容器在80以外的端口上运行,则需要指定端口:
型
但是,需要注意的是,理想情况下,在生产环境中不需要这种配置,因为
basepath
应该得到适当的配置和访问。