Why won't Docker load Tidy?

620 Views Asked by At

I'm trying to use phpdocx in order to create a docx file from HTML in a laravel api application.

In order to use this conversion tool, it is necessary to have Tidy installed.

I've included tidy in dockerfile like so

FROM php:7.2-fpm-stretch

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
     libicu-dev \
    openssh-client\
    git \
     curl \
     libmemcached-dev \
     libz-dev \
     libpq-dev \
     libjpeg-dev \
     libpng-dev \
     tidy \
     libfreetype6-dev \
     libssl-dev \
     libmcrypt-dev \
     gnupg \
     && rm -rf /var/lib/apt/lists/*

but when I add a phpinfo(); to my code, tidy is no where to be found.

What is strange is that when I access the bash of docker, I can tidy -v and i get HTML Tidy for Linux version 5.2.0

I have uncommented extension=php_tidy.dll in all the php.ini files associated with the project, and have rebuilt the image numerous times.

When I run check.php included in phpdocx I can find this error in the result Warning You must install Tidy for PHP if you want to use embedHTML in your Word documents.

I've tried docker pull imega/tidy to no avail.

I've been stuck on this for over a day now, if anyone has any idea where I'm going wrong I would appreciate the help.

root@c790d433727a:/var/www/vendor/phpdocx# php check.php

OK PHP version is 7.2.22
OK Zip support is enabled.
OK DOM support is enabled.
OK XML support is enabled.
Warning You must install Tidy for PHP if you want to use embedHTML in your Word documents.
OK mbstring is enabled.

root@c790d433727a:/var/www/vendor/phpdocx# tidy -v

HTML Tidy for Linux version 5.2.0

2

There are 2 best solutions below

0
Jimmix On BEST ANSWER

See an example Docker file:

FROM php:7.2-fpm-stretch
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get install -y libtidy-dev 
RUN docker-php-ext-install -j$(nproc) tidy

if you build it this way:

docker build --tag stackoverflow .

and run this way:

docker run --rm -it --entrypoint="" stackoverflow /bin/sh

you will be logged into CLI and may check installed extensions this way:

php -m

that gives list:

[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tidy
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

with:

tidy

under:

[PHP Modules]

Have fun with it :)

0
Demed On

I faced the same problem few days ago, problem was not only tidy library self but missed other tidy dependency libtidy-dev, this works perfectly to install and load tidy:

# Install system dependencies
RUN apt-get update && apt-get install -y \
        nano \
        libxml2-dev \
        libzip-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        libmagickwand-dev \
        **libtidy-dev** \
        git \
        curl \
        zip \
        ssh\
        wget\
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        exif \
        gd \
        soap \
        zip

RUN docker-php-ext-install tidy \
    && docker-php-ext-enable tidy