Feedforce Developer Blog

フィードフォース開発者ブログ

CircleCI で docker build するときの Empty continuation lines will become errors in a future release. という warning への対処方法

こんにちは、id:tsub511 です。

Dockerfile を読みやすくするために \ とコメントを駆使してみたら CircleCI で warning が出て一瞬焦ったので記事を書いてみました。

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 が出てしまいます。

f:id:tsub511:20210215173356p:plain
docker build 時の 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 👍

github.com

ただ、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 でした。

f:id:tsub511:20210215175709p:plain
CircleCI の Docker Engine バージョン

Docker のバグが修正されたのは 17.10 ですので、確かにまだバグが残っているバージョンです。

さて CircleCI の setup_remote_docker ですが、実はデフォルトでは 17.09.0-ce が使われるようです。

f:id:tsub511:20210215174427p:plain

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 を指定することをおすすめします。