Edited at

Docker コンテナで Embulk を動かす

Docker おじさんです。

ちょっと試しに Embulk を使おうとしたものの、手元のマシンではそのまま動かせなかった。

手元のマシンには Java 9 が入っているが、Embulk v0.9.x は Java 8 じゃないと動かせないらしい。

Java 8 入れるのもなんか嫌だったのでとりあえず Docker で動かすか、となった。


Dockerfile を書く


Dockerfile

FROM openjdk:8-jre-alpine

# Embulk 本体をインストールする
RUN wget -q https://dl.embulk.org/embulk-latest.jar -O /bin/embulk \
&& chmod +x /bin/embulk

# 使いたいプラグインを入れる
RUN apk add --no-cache libc6-compat \
&& embulk gem install embulk-output-td

WORKDIR /work

ENTRYPOINT ["java", "-jar", "/bin/embulk"]


躓いたポイントが2点。



  • FROM openjdk:8-jre-alpine だと embulk gem install で失敗する



    • flock unsupported or native support failed to load というエラーが出る

    • libjffi を入れたら動くかと思ったけど動かなかったので、あきらめて alpine をやめることにした


    • libc6-compat を入れたら解決した1




  • ENTRYPOINT ["/bin/embulk"] だけだとコンテナが起動しない



    • exec user process caused "exec format error" というエラーが出る

    • Docker の ENTRYPOINT では、jar ファイルを直接起動することが出来ない



      • sh -c "..." するか java -jar ... する必要がある






イメージをビルドする

$ docker build -t embulk .


コンテナを起動して Embulk を使う

例えばこんな感じで。

$ docker run --rm -it -v $(pwd):/work embulk --help

$ docker run --rm -it -v $(pwd):/work embulk guess seed.yml -o load.yml

$ docker run --rm -it -v $(pwd):/work embulk run load.yml