Laradock 起動時にphp-redisのFailed to fetchが出て失敗した時の対処法

最近`Docker`の基本を勉強したので、早速`Laravel`で何か作ってみようと`Laradock`をローカルで起動しようとした際に表題のエラーが出たので対処した方法を記載します。

もっと簡単な、あるいはまっとうなやりかたあれば教えていただきたく、です。
（確認の仕方も含めて丁寧目に書いています）

※Qiitaへの投稿は初めてなので、色々不安ですが、誤りなどありましたらご指摘ください。

状況
- 
ローカルへの環境構築でdocker起動までの手順は下記の記事に従いました。
なお私の環境はmacです。
　[DockerでLaravelの環境を構築し、Herokuへのデプロイを目指すためのチュートリアル](https://qiita.com/okita_kamegoro/items/3278d62dd0174960b7f7)

### dockerの起動
`laradock`ディレクトリ内で`docker-compose up`します。

```shell:
$ docker-compose up -d nginx mysql phpmyadmin
```
すると今回は以下のようなエラーが出て、起動に失敗しました。
### エラー内容
```shell:
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`のビルドの際に下記のコマンドで失敗してるとあります。

```shell:
'/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`を探します。

```shell:
# カレントディレクトリを確認
$ 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 ]`などとして該当箇所を検索します。

```dockerfile:Dockerfile
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`ディレクトリに戻って再度起動してみます。

```shell
$ 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コンテナの起動を確認します。

```shell
$ 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
```
上記のように表示されればコンテナが起動できています。

お疲れ様でした。