Установка GD в Docker

Я полный новичок Docker, но мне нужно поддерживать существующую систему. Dockerfile я использую, как показано ниже:

FROM php:5.6-apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail

RUN apt-get update && 
    apt-get install -y 
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd

когда я запускаю " docker build [sitename]", все кажется нормальным, пока я не получу ошибку:

configure: error: png.h not found.
The command '/bin/sh -c docker-php-ext-install gd' returned a non-zero code: 1

в чем причина этой ошибки?

1 ответов


вы должны добавить на Dockerfile:

FROM php:5.6-apache

RUN docker-php-ext-install mysql mysqli

RUN apt-get update -y && apt-get install -y sendmail libpng-dev

RUN apt-get update && \
    apt-get install -y \
        zlib1g-dev 

RUN docker-php-ext-install mbstring

RUN docker-php-ext-install zip

RUN docker-php-ext-install gd

затем перейдите в каталог с Dockerfile и

docker build -t sitename .

это сработало в моем случае:

Removing intermediate container f03522715567
Successfully built 9d69212196a2

Дайте мне знать, если вы получаете любые ошибки.

EDIT:

вы должны увидеть нечто вроде этого:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sitename            latest              9d69212196a2        19 minutes ago      414 MB
<none>              <none>              b6c69576a359        25 minutes ago      412.3 MB

EDIT2:

просто перепроверить все:

пожалуйста, выполните таким образом:

docker build -t sitename:1.0 .

(добавление :1.0 не должно ничего менять, я добавил его просто, чтобы иметь дополнительную строку в docker images выход)

затем запустите контейнер:

docker run --name sitename_test -p 80:80 sitename:1.0

он должен работать просто отлично.

я предположил, что apache использует стандартный порт (80) - возможно, вам нужно это настроить. Если у вас есть другие услуги/контейнеры прослушивания порт 80 вы можете сделать ваш контейнер слушает на другом порту:

docker run --name sitename_test -p 8080:80 sitename:1.0

это перенаправит трафик с порта 8080 на порт 80 "внутри" контейнера.

обычно вы запускаете контейнер в фоновом режиме. Для этого добавьте до docker run команда (но для целей тестирования вы можете опустить -d чтобы увидеть вывод в консоли).

надеюсь, это поможет.