我写了一个小 golang 应用程序。它做两件事:
处理 http://localhost:5000
每秒写一个日志
此应用程序位于 docker 容器内。你可以看到的记录器是我的,只是一个练习。申请开始。如果我 curl http://localhost:5000 我可以看到“Ciao,mondo!”。但是记录器没有启动。奇怪的是,如果我进入容器,我手动运行应用程序。记录器开始记录。我认为这可能是权限问题。
version: "3.9"
services:
app:
container_name: 'go_docker_app'
build:
dockerfile: Dockerfile
context: .
volumes:
- ./logs:/app/logs
- .:/opt/app/api
ports:
- "5000:5000"
这里是 main.go 文件
package main
import (
"fmt"
"net/http"
"time"
"github.com/sensorario/gol"
)
func main() {
http.HandleFunc("/", HelloServer);
http.ListenAndServe(":5000", nil);
go forever()
select{}
}
func HelloServer(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Ciao, mondo!");
}
func forever() {
l := gol.NewCustomLogger("/app");
for {
l.Info(fmt.Sprintf("%v+\n", time.Now()));
time.Sleep(time.Second)
}
}
这里是 Dockerfile
我尝试了更多解决方案。例如从 Dockerfile 创建 logger.log。我不认为是权限问题,因为我没有错误。
FROM golang:1.17-alpine
RUN mkdir -p /app/logs
ADD . /app
WORKDIR /app
RUN go get -d -v ./...
RUN go install -v ./...
RUN go build -o /application
EXPOSE 5000
RUN touch /app/logs/logger.log
CMD ["/application"]
大话西游666