如何解决如何从另一个容器使用 pdftk
我正在为 docker 苦苦挣扎。
我从 https://github.com/dunglas/symfony-docker 构建了我的 symfony 容器。
该应用功能齐全并按预期工作。
我现在正在尝试使用 pdftk 的“填写表单”功能。所以我认为最好的主意是在 PHP-fpm 容器上安装 pdftk。这不起作用,因为它是一个 alpin 版本,我在 apk 中找不到该包。
该软件包现在已正确安装,但安装在另一个容器上。我不知道 PHP-fpm 应该如何从另一个容器调用 pdftk。
以下是 Dockerfile 和 docker-compose 文件。
但我想我可能误解了 Docker 应该如何工作。
如果有人可以为那些将不胜感激的人提供一些线索。
Dockerfile
# the different stages of this Dockerfile are meant to be built into separate images
# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage
# https://docs.docker.com/compose/compose-file/#target
# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
ARG PHP_VERSION=8.0
ARG CADDY_VERSION=2
# "PHP" stage
FROM PHP:${PHP_VERSION}-fpm-alpine AS symfony_PHP
# persistent / runtime deps
RUN apk add --no-cache \
acl \
fcgi \
file \
gettext \
git \
gnu-libiconv \
jq \
nano \
bash \
;
# install gnu-libiconv and set LD_PRELOAD env to make iconv work fully on Alpine image.
# see https://github.com/docker-library/PHP/issues/240#issuecomment-763112749
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so
ARG APCU_VERSION=5.1.20
RUN set -eux; \
apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
libzip-dev \
zlib-dev \
; \
\
docker-PHP-ext-configure zip; \
docker-PHP-ext-install -j$(nproc) \
intl \
zip \
; \
pecl install \
apcu-${APCU_VERSION} \
; \
pecl clear-cache; \
docker-PHP-ext-enable \
apcu \
opcache \
; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/PHP/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --no-cache --virtual .PHPexts-rundeps $runDeps; \
\
apk del .build-deps
copY docker/PHP/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
RUN chmod +x /usr/local/bin/docker-healthcheck
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
RUN ln -s $PHP_INI_DIR/PHP.ini-production $PHP_INI_DIR/PHP.ini
copY docker/PHP/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini
copY docker/PHP/PHP-fpm.d/zz-docker.conf /usr/local/etc/PHP-fpm.d/zz-docker.conf
copY docker/PHP/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint
VOLUME /var/run/PHP
copY --from=composer:latest /usr/bin/composer /usr/bin/composer
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV PATH="${PATH}:/root/.composer/vendor/bin"
workdir /srv/app
# Allow to use development versions of Symfony
ARG STABILITY="stable"
ENV STABILITY ${STABILITY:-stable}
# Allow to select skeleton version
ARG SYMFONY_VERSION=""
# Download the Symfony skeleton and Leverage Docker cache layers
RUN composer create-project "symfony/skeleton ${SYMFONY_VERSION}" . --stability=$STABILITY --prefer-dist --no-dev --no-progress --no-interaction; \
composer clear-cache
RUN wget https://get.symfony.com/cli/installer -O - | bash
###> recipes ###
###> doctrine/doctrine-bundle ###
RUN apk add --no-cache --virtual .pgsql-deps postgresql-dev; \
docker-PHP-ext-install -j$(nproc) pdo_pgsql; \
apk add --no-cache --virtual .pgsql-rundeps so:libpq.so.5; \
apk del .pgsql-deps
###< doctrine/doctrine-bundle ###
###< recipes ###
RUN wget https://get.symfony.com/cli/installer -O - | bash ; mv /root/.symfony/bin/symfony /usr/local/bin/symfony;
copY . .
RUN set -eux; \
mkdir -p var/cache var/log; \
composer install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction; \
composer dump-autoload --classmap-authoritative --no-dev; \
composer symfony:dump-env prod; \
composer run-script --no-dev post-install-cmd; \
chmod +x bin/console; sync
VOLUME /srv/app/var
ENTRYPOINT ["docker-entrypoint"]
CMD ["PHP-fpm"]
FROM caddy:${CADDY_VERSION}-builder-alpine AS symfony_caddy_builder
RUN xcaddy build \
--with github.com/dunglas/mercure \
--with github.com/dunglas/mercure/caddy \
--with github.com/dunglas/vulcain \
--with github.com/dunglas/vulcain/caddy
FROM caddy:${CADDY_VERSION} AS symfony_caddy
workdir /srv/app
copY --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
copY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy
copY --from=symfony_PHP /srv/app/public public/
copY docker/caddy/Caddyfile /etc/caddy/Caddyfile
FROM ubuntu:xenial
MAINTAINER Matthias Nüßler <m.nuessler@web.de>
ENV PDFTK_VERSION 2.02
# The directory containing the PDF files to be processed is expected to be mounted here
# as a docker volume when running the container.
RUN mkdir /work
workdir /work
VOLUME ["/work"]
RUN apt-get update && \
apt-get install -y --no-install-recommends unzip build-essential gcj-jdk && \
apt-get clean
ADD https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-${PDFTK_VERSION}-src.zip /tmp/
RUN unzip /tmp/pdftk-${PDFTK_VERSION}-src.zip -d /tmp && \
sed -i 's/VERSUFF=-4.6/VERSUFF=-5/g' /tmp/pdftk-${PDFTK_VERSION}-dist/pdftk/Makefile.Debian && \
cd /tmp/pdftk-${PDFTK_VERSION}-dist/pdftk && \
make -f Makefile.Debian && \
make -f Makefile.Debian install && \
rm -Rf /tmp/pdftk-*
ENTRYPOINT ["/usr/local/bin/pdftk"]
docker-compose.yml
version: "3.4"
services:
PHP:
build:
context: .
target: symfony_PHP
args:
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
STABILITY: ${STABILITY:-stable}
restart: unless-stopped
volumes:
- PHP_socket:/var/run/PHP
healthcheck:
interval: 10s
timeout: 3s
retries: 3
start_period: 30s
environment:
# Run "composer require symfony/orm-pack" to install and configure Doctrine ORM
DATABASE_URL: postgresql://${POSTGRES_USER:-main}:${POSTGRES_PASSWORD:-main}@database:5432/${POSTGRES_DB:-main}?serverVersion=${POSTGRES_VERSION:-13}
# Run "composer require symfony/mercure-bundle" to install and configure the Mercure integration
MERCURE_PUBLISH_URL: ${MERCURE_URL:-http://caddy/.well-kNown/mercure}
SYMFONY_VERSION:
caddy:
build:
context: .
target: symfony_caddy
depends_on:
- PHP
environment:
SERVER_NAME: ${SERVER_NAME:-localhost,caddy:80}
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_PUBLISHER_JWT_KEY:-!ChangeMe!}
MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_SUBSCRIBER_JWT_KEY:-!ChangeMe!}
restart: unless-stopped
volumes:
- PHP_socket:/var/run/PHP
- caddy_data:/data
- caddy_config:/config
ports:
# HTTP
- target: 80
published: 80
protocol: tcp
# HTTPS
- target: 443
published: 443
protocol: tcp
# HTTP/3
- target: 443
published: 443
protocol: udp
#
# pdftk:
# build:
# context: .
# target: symfony_pdftk
# volumes:
# - pdftk_work:/work
# tty: true
###> doctrine/doctrine-bundle ###
database:
image: postgres:${POSTGRES_VERSION:-13}-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-app}
# You should definitely change the password in production
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-main}
POSTGRES_USER: ${POSTGRES_USER:-main}
volumes:
- db-data:/var/lib/postgresql/data:rw
# You may use a bind-mounted host directory instead,so that it is harder to accidentally remove the volume and lose all your data!
# - ./docker/db/data:/var/lib/postgresql/data:rw
###< doctrine/doctrine-bundle ###
volumes:
PHP_socket:
caddy_data:
caddy_config:
pdftk_work:
###> doctrine/doctrine-bundle ###
db-data:
###< doctrine/doctrine-bundle ###
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。