DockerでRustの環境を作る際に、なんやかんや色々ハマってしまったので備忘録として。
docker内でのコマンドは (docker)$
って感じで書いています。
あと、便利に使えるようにzsh用のコマンド化したコードも載せています。
MacBookPro == 2017 Core i5 16GB
Docker desktop == 2.1.0.1
cargo runまでは別に動くんだけど、buildとかしても作成されるバイナリはlinux用なのでホスト側(Mac)で実行できない…orz
そこで、cross compileができるイメージを探したところ、この記事の方が書いたDockerfileを参考に(ほぼ写経)して作成した。
$ docker run --rm -it rust:osx bash
(docker)$ CROSS_TRIPLE=x86_64-apple-darwin
(docker)$ crossbuild cargo --target=x86_64-apple-darwin
これで無事にMacで動くバイナリのbuildができるようになった。
CROSS_TRIPLE=x86_64-apple-darwin
この環境変数を書き込んでいる箇所をDockerfileの中に埋めようと思ったが、うまくいかない原因が特定できていないが、 CROSS_TRIPLE=x86_64-apple-darwin
という環境変数をDockerfileに下のように設定しても、うまくいかずにハマった。
ENV CROSS_TRIPLE=x86_64-apple-darwin
...
$(docker) echo $CROSS_TRIPLE
# x86_64-apple-darwin14
!?
なぜかx86_64-apple-darwin 14 になってしまう。
ARGからENVに落とし込んだり、無理やり設定しようとしたがうまくいかなかった。
docker run CROSS_TRIPLE=x86_64-apple-darwin crossbuild cargo --target=x86_64-apple-darwin
こんな感じで無理やり設定しようともした。
結果的に、Dockerfileに書くのを諦めて、以下のように docker run -e
で設定して、 cargo build
するとうまくいった。
docker run -e CROSS_TRIPLE=x86_64-apple-darwin cargo --target=x86_64-apple-darwin