JIC*_*HUN 5 go docker dockerfile
去代码:
\n\npackage main\n\nimport (\n "fmt"\n "time"\n)\n\nfunc main() {\n var local,_ = time.LoadLocation("Asia/Shanghai")\n fmt.Println(time.Now())\n fmt.Println(time.Now().In(local))\n}\nRun Code Online (Sandbox Code Playgroud)\n\nDockerfile:
\n\nFROM scratch\nCOPY ./main /main\nCMD [ "/main" ]\nRun Code Online (Sandbox Code Playgroud)\n\n构建.sh:
\n\nrm -rf main\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main . \ndocker build -t hello-go .\ndocker run hello-go\nRun Code Online (Sandbox Code Playgroud)\n\n所有文件都位于一个名为 hello-go 的文件夹中。当我在 osx 中运行 Go 代码时。有用。
\n\n\n\npackage main\n\nimport (\n "fmt"\n "time"\n)\n\nfunc main() {\n var local,_ = time.LoadLocation("Asia/Shanghai")\n fmt.Println(time.Now())\n fmt.Println(time.Now().In(local))\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我构建 docker 映像并启动它时。一个这样的错误:
\n\n\xe2\x9e\x9c hello-go ./build.sh\nSending build context to Docker daemon 1.937MB\nStep 1/3 : FROM scratch\n --->\nStep 2/3 : COPY ./main /main\n ---> 80da783f6c5d\nStep 3/3 : CMD /main\n ---> Running in 85cb022b3ce2\n ---> 485ddd3a08dd\nRemoving intermediate container 85cb022b3ce2\nSuccessfully built 485ddd3a08dd\nSuccessfully tagged hello-go:latest\n2017-12-13 13:52:59.861173734 +0000 UTC m=+0.000252335\npanic: time: missing Location in call to Time.In\n\ngoroutine 1 [running]:\ntime.Time.In(0xbe846a0ef355744e, 0x4d607, 0x539b80, 0x0, 0x0, 0x0, 0xc420037f70)\n /usr/local/go/src/time/time.go:1073 +0xc0\nmain.main()\n /Users/liujichun/Desktop/workspace/docker/hello-go/main.go:11 +0xee\n\xe2\x9e\x9c hello-go\nRun Code Online (Sandbox Code Playgroud)\n\n我知道暂存图像是空的。我应该做什么才能做到。
\n我认为解决这个问题的正确方法是按照库的要求导入 tzdata。您可以利用TZ环境变量。
解决方案在我在 GitHub上找到的 Dockerfile 中指出
总结一下一切:
FROM golang:alpine AS build
RUN apk update && apk add ca-certificates && apk add tzdata
WORKDIR /app
ADD . .
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
FROM scratch AS final
COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=build /app/myapp /
ENV TZ Australia/Sydney
ENTRYPOINT ["/myapp"]
Run Code Online (Sandbox Code Playgroud)
使用这个库https://godoc.org/4d63.com/tz
他们的例子(参见tz.LoadLocation):
t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
fmt.Println(t)
syd, _ := tz.LoadLocation("Australia/Sydney")
fmt.Println(t.In(syd))
// Output:
// 2009-11-10 23:00:00 +0000 UTC
// 2009-11-11 10:00:00 +1100 AEDT
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6070 次 |
| 最近记录: |