Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么docker容器中的应用程序不';不能重新启动吗?_Linux_Docker_Go_Containers - Fatal编程技术网

Linux 为什么docker容器中的应用程序不';不能重新启动吗?

Linux 为什么docker容器中的应用程序不';不能重新启动吗?,linux,docker,go,containers,Linux,Docker,Go,Containers,我已经用golang应用程序部署了一些docker容器。其中一个我需要通过以下命令启动: docker run --restart unless-stopped -it myapp /bin/bash 下一步,我进入容器并编辑一些配置文件,然后运行 go build main.go 和/main 在那之后,我按下ctrl+q并将其忽略。 一切正常,所有容器在重启服务器后都能正常重启。但有一个问题,当myapp容器重新启动时,golang应用程序不会在容器仍然工作时运行。我必须再次输入并运行/

我已经用golang应用程序部署了一些docker容器。其中一个我需要通过以下命令启动:

docker run --restart unless-stopped -it myapp /bin/bash
下一步,我进入容器并编辑一些配置文件,然后运行

go build main.go
/main
在那之后,我按下ctrl+q并将其忽略。 一切正常,所有容器在重启服务器后都能正常重启。但有一个问题,当myapp容器重新启动时,golang应用程序不会在容器仍然工作时运行。我必须再次输入并运行
/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"]

当您创建一个容器并作为命令传入
/bin/bash
时,Docker只关心这个问题。当容器重新启动时,它将启动另一个
/bin/bash
实例

Docker不会监视您的shell会话,并在它启动命令后查看您所做的事情。如果您想实际将
/main
作为容器的命令运行,则需要将
/go/src/app/main
作为命令传递,而不是
/bin/bash


此外,编译代码最好在映像构建阶段进行,而不是在容器运行时进行。

Dockerfile
中进行“编辑”和构建,然后
docker运行--重新启动,除非停止myapp main
Dockerfile的外观。是否将应用程序设置为在容器启动时运行?Stack Overflow是一个解决编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。@foecum由于网络的原因,我有可变配置,这就是为什么我必须编辑容器。DockFile看起来像:来自golang:1.8 WORKDIR/go/src/app COPY。运行go-wrapper下载#“go-get-d-v./…”运行go-wrapper安装#“go-install-v./…”运行[“apt-get”,“update”]运行[“apt-get”,“install”,“-y”,“vim”]EXPOSE 3000 CMD[“app”]我的建议是您运行不同的docker文件,覆盖您一直编辑的配置。这样,当应用程序启动时,您总是拥有正确的配置,而不必每次都编辑文件