こんにちは、id:tsub511 です。
Dockerfile を読みやすくするために \
とコメントを駆使してみたら CircleCI で warning が出て一瞬焦ったので記事を書いてみました。
- CircleCI で docker build する時の warning
- warning が出たのは Docker のバグ
- CircleCI の Docker のデフォルトバージョンは 17.09.0-ce
- まとめ
CircleCI で docker build する時の warning
例えば以下のような Dockerfile があったとします。
FROM amazonlinux:2 ENV RUBY_VERSION=2.7.2 \ BUNDLER_VERSION=2.2.9 \ TZ=/usr/share/zoneinfo/Asia/Tokyo RUN \ # Install mysql-community-devel yum install -y yum-utils && \ yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm && \ yum-config-manager --enable mysql57-community && \ yum-config-manager --disable mysql80-community && \ yum install -y mysql-community-devel && \ yum remove -y mysql80-community-release yum-utils && \ \ # Install ruby yum install -y "https://github.com/feedforce/ruby-rpm/releases/download/${RUBY_VERSION}/ruby-${RUBY_VERSION}-1.el7.centos.x86_64.rpm" && \ printf "install: --no-document\nupdate: --no-document\n" > /etc/gemrc && \ gem install -v "$BUNDLER_VERSION" bundler
これを使って CircleCI で docker build すると、Empty continuation lines will become errors in a future release.
という warning が出てしまいます。
普通に読むと、何もコマンドを実行していない \
だけの行やコメントだけの行を消した方が良いのかな?と受け取ってしまいがちですが、これは実は Docker 側のバグでした。
warning が出たのは Docker のバグ
本来はただの空行だけの場合に warning を出したかったようですが、コメントが書かれた行も warning が出てしまっているようです。
以下に書かれているように、Docker 17.10 で修正済みとのことです。
Thanks for reporting; this issue was resolved through #35004, which is included in Docker 17.10 and up.
I'll close this issue because this was resolved, but feel free to continue the conversation 👍
ただ、Docker 17.10 というと 2017/10 リリースのバージョンですので、2021/02 現在でまだバグが残っているのはおかしいです。
CircleCI の Docker のバージョンを確認してみましょう。
CircleCI の Docker のデフォルトバージョンは 17.09.0-ce
CircleCI 内で docker build を実行するためには setup_remote_docker
が必要です。
setup_remote_docker
によって CircleCI のジョブのホスト VM で Docker Engine が起動しますが、そこで使われている Docker Engine のバージョンは 17.09.0-ce でした。
Docker のバグが修正されたのは 17.10 ですので、確かにまだバグが残っているバージョンです。
さて CircleCI の setup_remote_docker
ですが、実はデフォルトでは 17.09.0-ce が使われるようです。
https://circleci.com/docs/2.0/building-docker-images/#docker-version
まとめ
Dockerfile で \
だけの行やコメントだけの行がある時に CircleCI で docker build すると Empty continuation lines will become errors in a future release.
という warning が出るのは Docker のバグと CircleCI の setup_remote_docker
のデフォルトバージョンが古い、という合わせ技によって起きていました。
warning 自体は Docker のバグだったので無視で良いですが、古いバージョンを使い続けるのはあまり良くない気がします。
基本的にはデフォルトを使いたいところですが、17.09.0-ce だと色々な機能が使えないですし、上述したバグもあるので setup_remote_docker
を使うときは version を指定することをおすすめします。