为什么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阶段而不是在容器运行时,编译代码是更好的。