Docker/Kubernetes 実践コンテナ開発入門 メモ

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

  • 作者:山田 明憲
  • 発売日: 2018/08/25
  • メディア: 単行本(ソフトカバー)

これをやっていました。

第一版なので、正誤表をみつつ進めてますが、自分の打ち間違いも含め途中途中ハマりながらやっています。

4.2.7、P133でハマったので、状態と解決方法をメモで残しておきます。

todo_mysql_masterにコマンドでアクセスする場面で、masterが数秒おきに起動したり停止したりして、うまく進めなくなりました。

どこで止まっているのか確認するために、masterのログを確認します。

$ docker container exec -it manager docker service logs todo_mysql_master

以下が取得したログ

(省略)
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
todo_mysql_master.1.m4qjkgjrkz8w@b56ba56fda4c    | Version: '5.7.30-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server (GPL)
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | 2020-07-03 09:18:33+00:00 [Note] [Entrypoint]: Creating database tododb
todo_mysql_master.1.m4qjkgjrkz8w@b56ba56fda4c    | 2020-07-03 09:18:40+00:00 [Note] [Entrypoint]: Temporary server started.
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | 2020-07-03 09:18:33+00:00 [Note] [Entrypoint]: Creating user gihyo
todo_mysql_master.1.m4qjkgjrkz8w@b56ba56fda4c    | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | 2020-07-03 09:18:33+00:00 [Note] [Entrypoint]: Giving user gihyo access to schema tododb
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | 
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03T09:16:23.960358Z 0 [Note] Failed to start slave threads for channel ''
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03T09:16:23.970909Z 0 [Note] Event Scheduler: Loaded 0 events
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03T09:16:39.145118Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03T09:16:23.971724Z 0 [Note] mysqld: ready for connections.
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03T09:16:39.148152Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | Version: '5.7.30-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server (GPL)
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03T09:16:39.153249Z 0 [Note] Failed to start slave threads for channel ''
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03T09:16:39.163731Z 0 [Note] Event Scheduler: Loaded 0 events
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03 09:16:24+00:00 [Note] [Entrypoint]: Temporary server started.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | 2020-07-03 09:18:33+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/prepare.sh
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | this container is master
todo_mysql_master.1.we3ge92vurbg@b56ba56fda4c    | /docker-entrypoint-initdb.d/prepare.sh: line 6: return: can only `return' from a function or sourced script
todo_mysql_master.1.m4qjkgjrkz8w@b56ba56fda4c    | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03T09:16:39.164852Z 0 [Note] mysqld: ready for connections.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | Version: '5.7.30-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 0  MySQL Community Server (GPL)
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03 09:16:39+00:00 [Note] [Entrypoint]: Temporary server started.
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03 09:16:28+00:00 [Note] [Entrypoint]: Creating database tododb
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03 09:16:28+00:00 [Note] [Entrypoint]: Creating user gihyo
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03 09:16:28+00:00 [Note] [Entrypoint]: Giving user gihyo access to schema tododb
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03 09:16:43+00:00 [Note] [Entrypoint]: Creating database tododb
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03 09:16:43+00:00 [Note] [Entrypoint]: Creating user gihyo
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03 09:16:43+00:00 [Note] [Entrypoint]: Giving user gihyo access to schema tododb
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | 2020-07-03 09:16:28+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/prepare.sh
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | /docker-entrypoint-initdb.d/prepare.sh: line 6: return: can only `return' from a function or sourced script
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 
todo_mysql_master.1.vtqqahkpt1zw@a362cdfc8205    | this container is master
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | 2020-07-03 09:16:43+00:00 [Note] [Entrypoint]: /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/prepare.sh
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | this container is master
todo_mysql_master.1.ucp8l1j3p8ck@a362cdfc8205    | /docker-entrypoint-initdb.d/prepare.sh: line 6: return: can only `return' from a function or sourced script

何回かログを取得してみるとどれも、

/docker-entrypoint-initdb.d/prepare.sh: line 6: return: can only `return' from a function or sourced script

で最後が終わっているようです。

該当のprepare.shの6行目は return 0 となっていると思います。

修正前: return 0
修正後: exit

こちらに変更したら、masterのコンテナが停止せずに動くようになりました。