我对Docker很陌生。我有一个Golang应用程序,它的结构如下:
.
├── 404.html
├── Dockerfile
├── index.html
├── scripts
├── server.go
├── static
│ ├── jquery.min.js
│ ├── main.css
│ └── main.js
└── styles我从DockerHub拿到了DockerHub文件。它太大了,不能在这里发布,但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新手,需要一些指导。
发布于 2018-07-30 02:37:51
从您的docker ps输出中,您的映像被配置为仅运行shell。由于您将其作为没有任何输入的后台进程运行,因此它处理了所有输入并成功退出(状态代码0)。docker logs 6adc34244350将显示它产生的输出(如果有的话)。
Docker有一个很棒的tutorial on writing and running custom images,值得一读。特别是,您不应该复制官方的golang Dockerfile文件;您自己的Dockerfile文件可以以FROM golang:1.10开头,它将继承该镜像中的所有内容。您几乎肯定希望确保拥有一个在容器启动时(默认情况下)运行应用程序的CMD命令。
https://stackoverflow.com/questions/51583068
复制相似问题