Go+DockerをRaspberry Pi にデプロイ

ここを書いている途中に得られた知見のまとめ

Raspberry Pi と他でアーキテクチャが異なる

intelのCPUはamd64という命令セットで出来ている。それでラズパイはarmという命令セット。

いくらDockerのポータビリティが凄いと言っても命令セットが異なってしまえば、叶わず。

それに気づけず、エラーを量産しました。

“exec format error”が出てきたら疑うべきでしょう。

ということで命令セットが異なるアーキテクチャの間で実行する場合は docker build を行う際に別途環境変数として指定してあげましょう。

以下の例は --build-arg GOARCH="arm" をラズパイに指定してください。 --build-arg GOARCH="amd64" は他の環境で動かすときに指定してね

おまけ

ここからはGo 1.11.2の話なので1.12だと修正されてるかも・・・

gopathが通っているとGo Modulesを動かすことが出来ません。
なのでFROMで指定した後、GOPATHを退避する必要があります。

こんな感じでね。

後、

これを忘れると悲惨なことになるから気をつけようね!
余談ですがGo 1.12でもGo Modulesを使用するときのコマンドは

となっています。
えっGo112じゃないの・・・・

以上

未分類

Posted by reud