10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerAdvent Calendar 2020

Day 3

Docker勉強中に出たエラーと解決法の備忘録

Last updated at Posted at 2020-12-03

はじめに

Dockerの初歩を勉強中なのですが、勉強中に出たエラーとその解決法についてつらつらと書いていこうと思います。

インデント位置が間違えていたケース

エラー内容

$ docker-compose build

ERROR: The Compose file './docker-compose.yml' is invalid because:
Invalid top-level property "mysql". Valid top-level sections for this Compose file are: version, services, networks, volumes, secrets, configs, and extensions starting with "x-".

docker-compose build実行時に上記のエラーが発生。

以下docker-compose.ymlの記述

docker-compose.yml

(注:分かりやすくするためコードを省略しています)
version: "3"

services:
  rails:
    build: .

>    mysql:
>      image: mysql:8.0

上記を見てもらえると分かると思いますが問題の原因は で記述した部分です。
単純にインデントが揃って無かったことによるエラーでしたが、当初は全然意味が分からなくて解決までに相当時間を費やしました。(当初はインデントがずれてるくらいでまさかエラーにはならないだろうと思いこんでいたことが原因です。)
それと、エラー文からもInvalid top-level property "mysql"**「無効なトップレベルプロパティ」(直訳)**という内容からも判断出来ます。

以下修正版

docker-compose.yml

(注:分かりやすくするためコードを省略しています)
version: "3"

services:
  rails:               
    build: .          

  mysql:              < インデントを(rails)部分に揃える
    image: mysql:8.0  < インデントを(build)部分に揃える

bundlerが原因のエラー

エラー内容


/usr/local/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.1.4) required by your /app/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
	from /usr/local/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
	from /usr/local/bin/bundle:23:in `<main>'
ERROR: Service 'web' failed to build : The command '/bin/sh -c bundle install' returned a non-zero code: 1

こちらもエラー内容から判断出来ます。
run gem install bundler:2.1.4
という部分からgem install bundler:2.1.4を実行してください。という内容なのでDockerfileにRUN gem install bundlerの記述を追加したらエラーが解消出来ました。(以下参照)

Dockerfile

RUN gem install bundler >> これを追加

mysql-clientでエラー

エラー内容


E: Package 'mysql-client' has no installation candidate
ERROR: Service 'web' failed to build : The command '/bin/sh -c apt-get update -qq && apt-get install -y   build-essential   nodejs   yarn   mysql-client vim --no-install-recommends &&   rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100

E: Package 'mysql-client' has no installation candidate

MySQLをDBに使用していたのでDockerfile内にてmysql-clientの記述をしていたら上記のエラーが発生。has no installation candidateを直訳したら「インストールの候補がありません」とのこと。
調べて見た所mysql-client は、現在はmariadb-client に統合されてしまっているとの情報がありました。
よって該当箇所をmariadb-clientに変更した所無事に解消しました。

Access denied for user 'root'(using password: YES)のエラー

エラー内容


Access denied for user 'root'@'192.168.~.~' (using password: YES)
Couldn't create 'app_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Access denied for user 'root'@'192.168.~.~' (using password: YES)

MySQLのアクセスが拒否されましたという内容のエラー。どのタイミングで発生したかちょっと忘れてしまったのですが多分docker-compose upなどのタイミングで発生したと思われます。
例によって調べていた所docker-compose.yml内でvolumesを使用していたのですがその部分が今回のエラーに関係していたみたいです。
docker-compose down --volumesを使用してvolumesを一度削除したら無事に直りました。

以下が自分が使用したコマンド


docker-compose down -v
docker-compose up -d —-build
docker-compose run --rm web bundle exec rails db:create db:migrate db:seed

おわりに

Dockerを勉強し始めたのはいいものの、Dockerが相当難しくて自分でDockerfileやdocker-compose.ymlをこうやって少しは設定出来るまでには相当の時間と労力を費やしました。
今はまだ簡単な開発環境のDockerの設定しか出来ませんが、もっと勉強してさらにDockerについての理解を深めて行きたいと思っています。

参考サイト

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?