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