質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

Q&A

解決済

2回答

3829閲覧

DockerでのGD拡張についてPHP/Laravel

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

1グッド

0クリップ

投稿2020/03/10 02:44

編集2020/03/10 02:55

現在、Laravelを使い、マッチングサイト作成の練習をしています。

Intervention Imageライブラリを使い、
画像投稿機能を作ろうしていますが、画像をアップロードしようとすると下記画面となります。

![エラー画像
(エラー画面)

エラーコード

GD Library extension not available with this PHP installation.

GDライブラリが使えない、と言われていることはわかるのですが、
調べ方が悪いのか、なかなか解決策を見つけられておりません。

必要な情報等が必要でしたら、追記させていただきます。
よろしくお願いいたします。

環境
Docker
laravel 6.0.4
Mac OS Catlina 10.15.1

RegisterController

<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\User; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Intervention\Image\Facades\Image; class RegisterController extends Controller { ~省略~ protected function create(array $data) { $imageFile = $data['image']; $filenameWithExt = $imageFile->getClientOriginalName(); $fileName = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extention = $imageFile->getClientOriginalExtension(); $fileNameToStore = $fileName.'_'.time().'.'.$extention; $fileData = file_get_contents($imageFile->getRealPath()); if ($extension = 'jpg'){ $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); } if ($extension = 'jpeg'){ $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); } if ($extension = 'png'){ $data_url = 'data:image/png;base64,'. base64_encode($fileData); } if ($extension = 'gif'){ $data_url = 'data:image/gif;base64,'. base64_encode($fileData); } $image = Image::make($data_url); $image->resize(400,400)->save(storage_path() . '/app/public/images/' . $fileNameToStore); return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'self_introduction' => $data['self_introduction'], 'sex' => $data['sex'], 'img_name' => $fileNameToStore, ]); ~省略~

register.blade.php

@extends('layouts.layout') @section('content') <div class="signupPage"> <header class="header"> <div>アカウントを作成</div> </header> <div class='container'> <form class="form mt-5" method="POST" action="{{ route('register') }}" enctype="multipart/form-data"> @csrf <label for="file_photo" class="rounded-circle userProfileImg"> <div class="userProfileImg_description">画像をアップロード</div> <i class="fas fa-camera fa-3x"></i> <input type="file" id="file_photo" name="image"> </label> <div class="userImgPreview" id="userImgPreview"> <img id="thumbnail" class="userImgPreview_content" accept="image/*" src=""> <p class="userImgPreview_text">画像をアップロード済み</p> </div> <div class="form-group @error('name')has-error @enderror"> <label>名前</label> <input type="text" name="name" class="form-control" placeholder="名前を入力してください"> @error('name') <span class="errorMessage"> {{ $message }} </span> @enderror </div> <div class="form-group @error('email')has-error @enderror"> <label>メールアドレス</label> <input type="email" name="email" class="form-control" placeholder="メールアドレスを入力してください"> @error('email') <span class="errorMessage"> {{ $message }} </span> @enderror </div> <div class="form-group @error('password')has-error @enderror"> <label>パスワード</label> <em>6文字以上入力してください</em> <input type="password" name="password" class="form-control" placeholder="パスワードを入力してください"> @error('password') <span class="errorMessage"> {{ $message }} </span> @enderror </div> <div class="form-group"> <label>確認用パスワード</label> <input type="password" name="password_confirmation" class="form-control" placeholder="パスワードを再度入力してください"> </div> <div class="form-group"> <div><label>性別</label></div> <div class="form-check form-check-inline"> <input class="form-check-input" name="sex" value="0" type="radio" id="inlineRadio1" checked> <label class="form-check-label" for="inlineRadio1">男</label> </div> <div class="form-check form-check-inline"> <input class="form-check-input" name="sex" value="1" type="radio" id="inlineRadio2"> <label class="form-check-label" for="inlineRadio2">女</label> </div> </div> <div class="form-group @error('self_introduction')has-error @enderror"> <label>自己紹介文</label> <textarea class="form-control" name="self_introduction" rows="10"></textarea> @error('self_introduction') <span class="errorMessage"> {{ $message }} </span> @enderror </div> </div> <div class="text-center"> <button type="submit" class="btn submitBtn">はじめる</button> <div class="linkToLogin"> <a href="{{ route('login') }}">ログインはこちら</a> </div> </div> </form> </div> </div> @endsection

Dockerfile

FROM php:7.3-fpm-alpine LABEL maintainer "ucan-lab" ARG TZ ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer RUN set -eux && \ apk add --update-cache --no-cache --virtual=.build-dependencies tzdata && \ cp /usr/share/zoneinfo/${TZ} /etc/localtime && \ apk del .build-dependencies && \ docker-php-ext-install bcmath pdo_mysql && \ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer && \ composer config -g repos.packagist composer https://packagist.jp && \ composer global require hirak/prestissimo
SeieiMiyagi👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2020/03/10 02:47

(質問文は編集できます)teratailでは画像もアップできますので、ご自信で所持されている画像であればそちらを使用されてはいかがでしょうか。(画像として質問文に表示されますし) また、エラー文を具体的にコードブロックで質問文に追記ください。
SeieiMiyagi

2020/03/10 02:52

Dockerfileも欲しいです
退会済みユーザー

退会済みユーザー

2020/03/10 02:56

お二人ともありがとうございます。 修正対応させていただきました。
Takumiboo

2020/03/10 02:57

「GDライブラリが使えない、と言われている」のなら、GDライブラリのインストールをしたら良いわけですよね。それを調べても見つけられないということでしょうか? 「Docker Laravel GD」とかでググるだけでたくさん出てくるように見えますが…。
guest

回答2

0

自分で一からDockerfile書けないならDocker使うのは早い。
gdのインストール方法は公式のドキュメントに書いてある。
https://hub.docker.com/_/php
ただしalpineでは違うのでこのままコピペしても多分動かない。

Homesteadでは最初からgdインストール済。
https://github.com/laravel/settler/blob/64db8230bc4df8eccbdb8cac8aa67792ce8a23af/scripts/provision.sh#L48

「最初はphp artisan serveでいい、少し複雑なことしたいならHomestead、Docker使うのは自分で対処できる人だけ」
とずっと同じことしか書いてない。
「Dockerでgd使う方法」なんてLaravelとは何も関係ないことで躓くのも質問するのも完全に無駄でしかない。
こういう無駄なことしなくていいようにHomesteadが用意されている。

投稿2020/03/10 03:33

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Dockerfileをこう書き換えるといかがでしょう、gd関係のライブラリとビルドに必要なライブラリを入れて、docker-php-ext-configure でビルド用のファイルがあるディレクトリを指定し、docker-php-ext-install が終わってからapk delでビルド用パッケージを削除するようにしました。

FROM php:7.3-fpm-alpine LABEL maintainer "ucan-lab" ARG TZ ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer RUN set -eux && \ apk add --update-cache --no-cache --virtual=.build-dependencies tzdata freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev && \ cp /usr/share/zoneinfo/${TZ} /etc/localtime && \ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ && \ docker-php-ext-install bcmath pdo_mysql gd && \ apk del .build-dependencies && \ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer && \ composer config -g repos.packagist composer https://packagist.jp && \ composer global require hirak/prestissimo

投稿2020/03/10 03:01

編集2020/03/10 03:32
SeieiMiyagi

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/10 03:12

こちら、ありがとうございます。 ただ、こちらの内容でDockerを再構築しようしてみましたが、 「docker-php-ext-install bcmath pdo_mysql gd」 を実行中に、 下記エラーとなってしましました。 ``` configure: error: png.h not found. ERROR: Service 'app' failed to build: The command '/bin/sh -c set -eux && apk add --update-cache --no-cache --virtual=.build-dependencies tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime && apk del .build-dependencies && docker-php-ext-install bcmath pdo_mysql gd && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer && composer config -g repos.packagist composer https://packagist.jp && composer global require hirak/prestissimo' returned a non-zero code: 1 ```
SeieiMiyagi

2020/03/10 03:33

Dockerfile更新しました
退会済みユーザー

退会済みユーザー

2020/03/10 05:18

ありがとうございます!! こちらでDocker環境自体は構築できましたが、 エラー画面は変わらず、GD Library extension not ~の画面に結局なってしまいます。。。 そもそものIntervention Imageライブラリを使わない、画像投稿方法などを調べて、 やり直してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問