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を書くのも馬鹿らしいので上でやることにした。