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

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

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

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

Docker

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

Q&A

解決済

3回答

6652閲覧

docker-compose でPHP7.4 環境を立ち上げようとすると apt-get updateコマンドが走りエラー。

Anon_

総合スコア334

docker-compose

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

Docker

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

0グッド

0クリップ

投稿2022/03/03 08:16

docker(Windows) にて、php7.4の環境を立ち上げたいのですが、
docker-compose up -d すると、下記のエラーが出てこけてしまいます。

=> ERROR [sample_php 3/3] RUN apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev 20.3s

Dockerfileに元々7.0-apacheと記載されていたものを、7.4-apacheに書き直しました。7.0のときは問題なく起動できていましたので、何故起動できないのか原因がよくわかりません。どう対処するとよいでしょうか。。

Dockerfile

1FROM php:7.0-apache 2COPY php.ini /usr/local/etc/php/ 3RUN apt-get update \ 4 && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \ 5 && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt 6

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

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

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

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

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

TaichiYanagiya

2022/03/05 15:32

docker search で検索しても "php:7.4-apache" という名前のイメージは見つかりません。 Docker Hub に存在しないからでは?
guest

回答3

0

ベストアンサー

7.4-apacheに書き換えたらイメージのbuildが必要になるので、Dockerfileに書いてあるapt-get update等が行われるのは当然です。その過程で失敗しているわけです。
エラーメッセージが示されているものだけではわかりませんが、幸いDockerfileがあるので手元でbuildしてみました。

% docker build --no-cache . ...略 #5 6.532 error: /usr/src/php/ext/mcrypt does not exist #5 6.532 #5 6.532 usage: /usr/local/bin/docker-php-ext-install [-jN] [--ini-name file.ini] ext-name [ext-name ...] #5 6.532 ie: /usr/local/bin/docker-php-ext-install gd mysqli #5 6.532 /usr/local/bin/docker-php-ext-install pdo pdo_mysql #5 6.532 /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop #5 6.532 #5 6.532 if custom ./configure arguments are necessary, see docker-php-ext-configure #5 6.532 #5 6.532 Possible values for ext-name: #5 6.567 bcmath bz2 calendar ctype curl dba dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlrpc xmlwriter xsl zend_test zip #5 6.569 #5 6.569 Some of the above modules are already compiled into PHP; please check #5 6.569 the output of "php -i" to see which modules are already loaded. ------ executor failed running [/bin/sh -c apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt]: exit code: 1

エラーから解るようにmcrypt extensionのインストールがうまくいっていません。ここでmcryptについて調べるとmcryptのインストール手順

この拡張モジュールは » PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 7.2.0

とあります。phpにバンドルされていた7.0と、PECLに移動したあとの7.4ではインストール方法が違います。
PECL extensionのインストールのやり方は https://hub.docker.com/_/php のPECL extensionsという見出しの所に書いてあるのでそれに従ってDockerfileを書き換えます。

FROM php:7.4-apache COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \ && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv \ && pecl install mcrypt \ && docker-php-ext-enable mcrypt

しかしながらこれでbuildすると今度はmbstringでエラーになってしまいました。mbstringはデフォルトで入っていたような気がするので確認します。

% docker run php:7.4-apache php -m [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 tokenizer xml xmlreader xmlwriter zlib [Zend Modules]

やはりmbstringはphp:7.4-apacheにはじめから入っているので改めてインストールする必要はありません。さらにiconvも入っていることがわかったのでこれらを取り除いて最終的なDockerfileは以下に示すものでいいと思います。手元ではこれでbuildできることを確認済みです。

FROM php:7.4-apache COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \ && docker-php-ext-install pdo_mysql mysqli gd \ && pecl install mcrypt \ && docker-php-ext-enable mcrypt

またこれでいちおうイメージのbuildまではできたことになりますがphpはバージョン間の互換性のない変更もそれなりにありますので、さらに上にのっけたものが動くかどうかは定かではありません。変更点はPHPマニュアルの付録にまとまっているので確認しましょう。

投稿2022/03/06 13:01

crhg

総合スコア1175

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

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

Anon_

2022/03/07 00:14

おっしゃる通りの方法でphp7.4を起動できました。 PECL extensionのインストールについてもとても参考になりました。 ありがとうございました!
guest

0

投稿2022/03/06 06:01

believe

総合スコア91

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

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

0

Dockerイメージのビルド: docker-compose up rankdle -d コマンドを実行する前に、Dockerイメージが正しくビルドされていることを確認してください。Dockerfileが正しい設定で記述されていること、依存関係が解決されていることを確認しましょう。

投稿2023/05/23 04:27

abel1303

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問