在Docker上部署Golang应用程序退出流程

时间:2018-07-29 17:56:15

标签: docker go

我是Docker的新手。我有一个具有以下结构的Golang应用程序:

.
├── 404.html
├── Dockerfile
├── index.html
├── scripts
├── server.go
├── static
│   ├── jquery.min.js
│   ├── main.css
│   └── main.js
└── styles

我从DockerHub获得了Dockerfile。它太大了,无法在此处发布,但是full version is here。我认为可能相关的Dockerfile的最后几行是:

ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
WORKDIR $GOPATH

当我进入目录并输入docker build -t my-app .时,它将成功构建。当我输入docker run -d -p 80:80 url-shortener时,它会给我一个我认为是ID的字符串。

但是当我执行docker ps时,它没有显示进程正在运行。 如果我执行docker ps -a,它会显示该过程,但会显示

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
6adc34244350        my-app       "/bin/sh"           6 minutes ago 
Exited (0) 6 minutes ago

很抱歉,这是一个非常愚蠢的问题。我是一个完整的Docker新手,可以使用一些指导。

1 个答案:

答案 0 :(得分:2)

docker ps输出中,您的映像被配置为仅运行Shell。由于您是在没有任何输入的情况下将其作为后台进程运行的,因此它会处理所有输入并成功退出(状态代码0)。 docker logs 6adc34244350将向您显示其产生的输出(如果有)。

Docker具有出色的tutorial on writing and running custom images,值得一读。特别是,您不应该复制官方的golang Dockerfile;您自己的Dockerfile可以以FROM golang:1.10开头,它将继承该映像中的所有内容。几乎还可以肯定要确保有一个CMD命令在容器启动时运行您的应用程序(默认)。