如何在执行命令在该容器中运行服务器之后从容器创build映像?

我有一个名为nodeserver1的正在运行的容器。 我发出了以下命令来实际运行节点服务器docker exec -d nodeserver1 nodejs ipshow.js现在我该如何从nodeserver1创build一个映像,以便下一次从这个映像创build一个容器时,我不需要发出exec命令。 我已经尝试使用docker commit <container id> <some-new-name>来提交它,但是当我运行新的容器时,它不启动节点服务器。

您可能想使用多级构build: https : //docs.docker.com/engine/userguide/eng-image/multistage-build/

下面是从docker文档复制的一个无耻的例子:

 FROM golang:1.7.3 WORKDIR /go/src/github.com/alexellis/href-counter/ RUN go get -d -v golang.org/x/net/html COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/src/github.com/alexellis/href-counter/app . CMD ["./app"] 

可能这是使用命名构build的更好的例子:

 FROM golang:1.7.3 as builder WORKDIR /go/src/github.com/alexellis/href-counter/ RUN go get -d -v golang.org/x/net/html COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /go/src/github.com/alexellis/href-counter/app . CMD ["./app"] 

这里的关键是COPY --from=builder /go/src/github.com/alexellis/href-counter/app . 。 注意它是如何使用--from=builder从其他图像中获取工件的。