an odd fellow

仕事のメモ

docker runでローカルのgoファイルを実行する

背景

RealWorldHTTPを読み始めた。goでサンプルのHTTPサーバを立ててcurlで色々オプションを付けてリクエストを試しながら挙動を確認していくようだった。

それで、サンプルのHTTPサーバーを書いたんだけど、dockerで実行したくて以下のようにした。

$ docker run golang go run server.go

が、当然docker runに渡すコマンドはコンテナ内で実行されるので、server.goはコンテナ内には無いのでこうなる。

stat server.go: no such file or directory

結論

まずdockerコンテナのワーキングディレクトリを調べる。

$ docker run golang pwd
/go

/goらしい

そしたらローカルのカレントディレクトリを/goにボリュームしながらrunする。

$ docker run -v $PWD:/go golang go run server.go

docker run -vに渡すパスは絶対パスでないとならないので.(ドット)で渡すとdockerに怒られるため$PWDとするしかない。

あとはdocker-composeのvolumesを使う方法もあるけど、そのためだけにdocker-compose.ymlを書くのも馬鹿らしいので上でやることにした。