この記事に書いてある内容で実行できなかった場合は教えてください。
ここでも質問されているのですが、READMEに書かれている方法ではlocalで起動することが出来ません。
Gophersのslackで聞いたところ解決したので書いておきます。(その節はありがとうございました!)
この手順に関してはREADMEを見るのではなく、Makefileを見ることで知ることが出来ます。
実行環境例
- Ubuntu 20.04 LTS
- docker version
$ docker version
Client: Docker Engine - Community
Version: 20.10.3
API version: 1.41
Go version: go1.13.15
Git commit: 48d30b5
Built: Fri Jan 29 14:28:23 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.3
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 46229ca
Built: Fri Jan 29 14:31:57 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
repositoryをclone
$ git clone https://go.googlesource.com/playground
gVisorの準備
installする場合
[https://gvisor.dev/docs/user_guide/install/:title]
上記に記載してあるお好みの方法でインストール
※aptでinstallした場合はインストール後に runsc install
コマンドを実行する必要がある。
gVisorを使いたくない(使えない)場合
gVisor(runsc)がインストールされていないとplaygroundのソースコードがそのままでは実行できない為、必要に応じて書き換えます。
playground/sandbox/sandbox.go
cmd := exec.Command("docker", "run",
"--name="+name,
"--rm",
"--tmpfs=/tmpfs:exec",
"-i", // read stdin
# runsc -> runcに書き換え
"--runtime=runc",
"--network=none",
"--memory="+fmt.Sprint(memoryLimitBytes),
*container,
"--mode=contained")
playground/sandbox/Makefile
runlocal: docker dockergvisor
docker network create sandnet || true
docker kill sandbox_dev || true
# rootlessDocker用
# /var/run/docker.sock -> /var/run/user/1000/docker.sockに書き換え
docker run --name=sandbox_dev --rm --network=sandnet -ti -p 127.0.0.1:8080:80/tcp -v /var/run/user/1000/docker.sock:/var/run/docker.sock golang/playground-sandbox:latest --dev
ローカル実行環境構築
1.基本となるdocker imageをビルド
playground
$ docker build -t golang/playground .
2.sandboxサーバ側起動
playground/sandbox
$ make runlocal
3.clientサーバ側起動
playground
$ make runlocal
4.playgroundに接続
http://localhost:8081/
おわりに
個人的には他人に何かのインストールを強要することは好きではないのでgVisorは好きじゃないです