LoginSignup
17

More than 3 years have passed since last update.

posted at

updated at

Organization

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

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
What you can do with signing up
17