2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Docker】Alpine Linuxにhubをインストールしようとしたら躓いたので、解決策を残す

Posted at

困ったこと

git操作を行えるdocker imageを作ろうと思い、Alpine Linuxイメージにgit, hubをインストールしようとしていました。
gitのインストールはパッケージを使えば簡単ですが、pull requestを作るために必要なhubは、安定して使えるパッケージがないので、バイナリファイルをインストールして使おうとしました。

hubを入れてhubコマンドを実行するとhub: not foundとエラーが出てしまいました。

Dockerfile
FROM alpine:latest
RUN apk update && apk add git bash wget
RUN wget https://github.com/github/hub/releases/download/v2.12.8/hub-linux-amd64-2.12.8.tgz && \
    tar xzf hub-linux-amd64-2.12.8.tgz && \
    mv hub-linux-amd64-2.12.8/bin/hub usr/local/bin/ && \
    rm hub-linux-amd64-2.12.8.tgz && \
    rm -r hub-linux-amd64-2.12.8
which -a hub
usr/local/bin/hub

hub
bin/sh: hub: not found

原因

(まだ理解が浅いのですが)Alpine Linuxではglibcではなく、musl-libcを使っているため、バイナリファイルをインストールして使おうとしたときに、うまく動いてくれないことがあるようです。

結論

以下3つの解決策があります。

1. パッケージが用意されているDebianやUbuntuを使う。

私はこのイメージを業務で使いたかったので、パッケージをインストールすれば使えるかつ、安定していそうな、この方法を選びました。 デメリットはAlpine Linuxイメージを使う場合よりもイメージが重たくなることです。

Dockerfile
FROM debian:latest
RUN apt update && apt install -y git hub

2. edgeバージョンのhubパッケージをインストールする。

edgeバージョンでしたらhubのパッケージがありますので、これをインストールして使用します。
https://pkgs.alpinelinux.org/packages?name=hub

※なお、edgeバージョンは開発中で安定していないため、本番環境には適しません。

Dockerfile
FROM alpine:latest
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
RUN apk update && apk add git hub bash

3.シンボリックリンクを張る。

libc6-compatというパッケージをインストールするとシンボリックリンクが張られ、hubコマンドを使えるようになりました。

Dockerfile
FROM alpine:latest
RUN apk update && apk add git bash wget libc6-compat
RUN wget https://github.com/github/hub/releases/download/v2.12.8/hub-linux-amd64-2.12.8.tgz && \
    tar xzf hub-linux-amd64-2.12.8.tgz && \
    mv hub-linux-amd64-2.12.8/bin/hub usr/local/bin/ && \
    rm hub-linux-amd64-2.12.8.tgz && \
    rm -r hub-linux-amd64-2.12.8

まとめ

安定して動いて欲しい場合は、1の方法が良さそうです。
趣味など不安定でも良い場合は、2か3の方法で良いと思います。

参照

Problem with the linux binaries on Alpine #1818
Alpine Linux で適当なバイナリを持ってきて動かす備忘録
glibc がリンクされた binary を alpine 上で動かしたい

2
2
0

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
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?