2016-09-23 2 views
6

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

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 

Когда я бегу "Докер строить [имя_сайта] все кажется нормально, пока я не получаю сообщение об ошибке:

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

Что является причиной этой ошибки?

ответ

16

Вы должны добавить libpng-dev пакет к вашему 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 

Let я знаю, если вы получите какие-либо ошибки.

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 команду этой путь:

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 «внутри» контейнера.

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

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

+0

Это, казалось, строилось, но при этом я получил несколько строк в красном; они терпят неудачу? – evilscary

+0

Пожалуйста, вставьте эти строки. Я сделал эту сборку, но не получил никаких предупреждений/ошибок. – lmtx

+0

Также, когда я проверяю «изображения докеров», это говорит о том, что в то время, когда я его запускал, был выполнен прогон сборки, но столбец «Хранилище» имеет «Нет» против него. – evilscary

Смежные вопросы