为什么docker容器中的应用程序不重新启动?

我已经部署了一些docker容器和golang应用程序。 其中一个我需要从这个命令开始:

docker run --restart unless-stopped -it myapp /bin/bash 

下一步我进入容器并编辑一些configuration文件,然后我运行

 go build main.go 

./main之后,我按Ctrl + q,并离开它。 一切正常,所有的容器重新启动服务器后,完美重启。 但有一个问题,当myapp容器重新启动时,golang应用程序在容器仍然工作时不运行。 我必须再次input并运行./main 。 我怎样才能解决它?

Dockerfile

 FROM golang:1.8 WORKDIR /go/src/app COPY . . RUN go-wrapper download # "go get -d -v ./..." RUN go-wrapper install # "go install -v ./..." RUN ["apt-get","update"] RUN ["apt-get","install","-y","vim"] EXPOSE 3000 CMD ["app"] 

当你创build一个容器并传入/bin/bash作为命令时,就像Docker在意的那样。 当容器重新启动时,它将启动另一个/bin/bash实例。

Docker不会监视你的shell会话,看看你在启动命令后做了什么事情。 如果你想真正运行./main作为容器的命令,那么你需要传入/go/src/app/main作为命令而不是/bin/bash

此外,在图像构build阶段而不是在容器运行时,编译代码是更好的。