最近Docker
の基本を勉強したので、早速Laravel
で何か作ってみようとLaradock
をローカルで起動しようとした際に表題のエラーが出たので対処した方法を記載します。
もっと簡単な、あるいはまっとうなやりかたあれば教えていただきたく、です。
(確認の仕方も含めて丁寧目に書いています)
※Qiitaへの投稿は初めてなので、色々不安ですが、誤りなどありましたらご指摘ください。
状況
ローカルへの環境構築でdocker起動までの手順は下記の記事に従いました。
なお私の環境はmacです。
DockerでLaravelの環境を構築し、Herokuへのデプロイを目指すためのチュートリアル
dockerの起動
laradock
ディレクトリ内でdocker-compose up
します。
$ docker-compose up -d nginx mysql phpmyadmin
すると今回は以下のようなエラーが出て、起動に失敗しました。
エラー内容
E: Failed to fetch http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-redis/php-redis_4.2.0-1+ubuntu16.04.1+deb.sury.org+1_amd64.deb 404 Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'workspace' failed to build: The command '/bin/sh -c if [ ${INSTALL_PHPREDIS} = true ]; then apt-get install -yqq php-redis ;fi' returned a non-zero code: 100
php-redis
のfetchに失敗しています。
※ ちなみにurl(http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/p/php-redis/php-redis_4.2.0-1+ubuntu16.04.1+deb.sury.org+1_amd64.deb) を確認するとたしかに該当のページが存在しません。
続いて「run apt-get update
するか--fix-missing
オプションつけてやってみて」みたいなことが書いてあります。
とりあえずapt-get update
を試してみることにします。
手順
最後のエラーメッセージにworkspace
のビルドの際に下記のコマンドで失敗してるとあります。
'/bin/sh -c if [ ${INSTALL_PHPREDIS} = true ]; then apt-get install -yqq php-redis ;fi' returned a non-zero code: 100
なので今回はこの上記の箇所にapt-get update
を足してみることにします。
上記の箇所ってどこ?
Dockerではコンテナ起動時にDockerfile
の内容に従ってビルドを行います。
なのでworkspace
のDockerfile
を探します。
# カレントディレクトリを確認
$ pwd
# laradockディレクトリ内であることを確認
# 私の場合 → /Users/ユーザー名/Docker/project_name/laradock
# ディレクトリ内のリストを表示
$ ls
DOCUMENTATION ide-codiad nginx
LICENSE ide-icecoder percona
adminer ide-theia php-fpm
aerospike ide-webide php-worker
apache2 ipython phpmyadmin
aws-eb-cli jenkins portainer
beanstalkd jupyterhub postgres
beanstalkd-console kibana postgres-postgis
caddy laravel-echo-server rabbitmq
cassandra laravel-horizon redis
certbot logs redis-cluster
couchdb logstash redis-webui
docker-compose.sync.yml maildev rethinkdb
docker-compose.yml mailhog selenium
docker-registry manticore solr
docker-sync.yml mariadb sonarqube
docker-web-ui memcached sync.sh
elasticsearch minio thumbor
env-example mongo traefik
gitlab mongo-webui travis-build.sh
grafana mosquitto varnish
graylog mssql 'workspace'
haproxy mysql zookeeper
hhvm neo4j
# workspaceがあるのを確認 ※わざとハイライトにしています
# workspaceへ移動
$ cd workspace
# workspace内のリストを表示
$ ls
'Dockerfile' composer.json insecure_id_rsa.pub
aerospike.ini crontab mc
aliases.sh insecure_id_rsa xdebug.ini
auth.json insecure_id_rsa.ppk
# Dockerfileがあるのを確認 ※わざとハイライトにしています
# Dockerfileを編集
$ vim Dockerfile
コマンドモードで/[ ${INSTALL_PHPREDIS} = true ]
などとして該当箇所を検索します。
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
apt-get install -yqq php-redis \
;fi
# 上記を下記のように書き換える
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
apt-get update && \
apt-get install -yqq php-redis \
;fi
:wq
で保存してファイルを閉じます。
dockerを再度起動
laradock
ディレクトリに戻って再度起動してみます。
$ cd ../ # workspaceディレクトリから一つ上のディレクトリに戻る
$ docker-compose up -d nginx mysql phpmyadmin
... # 初回起動時はそこそこ時間がかかる
Creating project_name_docker-in-docker_1 ... done
Creating project_name_mysql_1 ... done
Creating project_name_workspace_1 ... done
Creating project_name_phpmyadmin_1 ... done
Creating project_name_php-fpm_1 ... done
Creating project_name_nginx_1 ... done
今度はうまく起動できたようです。
一応dockerコンテナの起動を確認します。
$ docker ps --format "table {{.Names}}"
NAMES
project_name_nginx_1
project_name_php-fpm_1
project_name_phpmyadmin_1
project_name_workspace_1
project_name_mysql_1
project_name_docker-in-docker_1
上記のように表示されればコンテナが起動できています。
お疲れ様でした。