2016-09-23 11 views
6

Jestem kompletnym nowicjuszem Docker, ale muszę utrzymywać istniejący system. Dockerfile używam jest jak poniżej:Instalowanie GD w Dockerze

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 

Kiedy uruchamiam „docker budować [witryna]” wszystko wydaje się być w porządku, dopóki nie pojawia się błąd:

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

Co jest przyczyną tego błędu?

Odpowiedz

16

Należy dodać pakiet libpng-dev do 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 

Następnie przejdź do katalogu z Dockerfile i uruchom:

docker build -t sitename .

To działało w moim przypadku:

Removing intermediate container f03522715567 
Successfully built 9d69212196a2 

Niech ja wiem, jeśli masz jakieś błędy.

EDIT:

Powinieneś zobaczyć coś takiego:

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

EDIT2:

Wystarczy dokładnie sprawdzić wszystko:

uruchom polecenie docker build ten sposób:

docker build -t sitename:1.0 .

(dodanie :1.0 nie powinien nic zmieniać, dodałem po prostu mieć dodatkowy wiersz w docker images wyjściu)

Następnie uruchom pojemnika:

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

To powinno działać w porządku.

Zakładam, że apache używa standardowego portu (80) - może trzeba to zmienić. Jeśli masz inne usługi/pojemniki nasłuchuje na porcie 80 można dokonać pojemnik nasłuchuje na innym porcie:

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

które przekierowuje ruch z portu 8080 do portu 80 „wewnątrz” kontenera.

Normalnie uruchamiasz kontener w tle. W tym celu dodaj opcję -d do komendy docker run (ale dla celów testowania możesz pominąć -d, aby zobaczyć wyjście w konsoli).

Nadzieję, że pomaga.

+0

To wydawało się budować, ale robiąc to dostałem kilka linii na czerwono; czy te się nie udają? – evilscary

+0

Proszę wkleić te linie. Zrobiłem ten build, ale nie otrzymałem ostrzeżeń/błędów. – lmtx

+0

Również gdy sprawdzam "obrazy doków", jest napisane, że w czasie, w którym je uruchomiłem, był uruchamiany kompilator, ale kolumna Repozytorium ma "Brak" przeciw niemu. – evilscary