【发布时间】:2018-07-30 04:55:27
【问题描述】:
我正在学习 docker 并创建一个 Dockerfile 来用应用程序填充容器。 Step1是Dockerfile
FROM golang:alpine as builder
ADD /src/common $GOPATH/src/common
ADD /src/ins_signal_node $GOPATH/src/ins_signal_node
WORKDIR $GOPATH/src/ins_signal_node
RUN go build -o /go/bin/signal_server .
ADD /src/ins_full_node $GOPATH/src/ins_full_node
WORKDIR $GOPATH/src/ins_full_node
RUN go build -o /go/bin/full_node .
FROM alpine
COPY --from=builder /go/bin/signal_server /go/bin/signal_server
COPY --from=builder /go/bin/full_node /go/bin/full_node
COPY run_test.sh /go/bin
这里没有问题 - 没关系。在此之后,我运行我的脚本来重建并运行这个容器并输入它的 bash - Step2:
#!/bin/bash
docker container rm -f full
docker image rm -f ss
docker build -t ss .
winpty docker run -it --name full ss
所以此刻我在容器控制台中。在编写脚本时,我运行了 2 个命令 - Step3
cd go/bin/
./run_test.sh
有效! 但。在第 2 步之后 - 当我在控制台中时 - 我想要第 3 步 - 运行启动脚本以实现自动化。因此,在步骤 1 的 Dockerfile 末尾,我添加了一行
CMD ["cd go/bin/ && ./run_test.sh"]
在我运行第 2 步之后 - 现在完全启动 - 我收到了错误消息:
docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:348:启动容器进程导致“exec:\”cd go/bin/ && ./run_test.sh\”:stat cd go/bin/ && ./run_test .sh:没有这样的文件或目录”:未知。
如果我运行这个 CMD - cd go/bin/ && ./run_test.sh - 当我在容器的控制台中时手动运行 - 它可以工作! 所以我的问题 - 我的有什么不好的
CMD ["cd go/bin/ && ./run_test.sh"]
更新
好的。我现在尝试使用 ["/go/bin/run_test.sh"] 和 ["./go/bin/run_test.sh"] 并得到了
initializing…
/go/bin/run_test.sh: line 2: ./signal_server: not found
starting…
/go/bin/run_test.sh: line 10: ./full_node: not found
/go/bin/run_test.sh: line 9: ./full_node: not found
/go/bin/run_test.sh: line 8: ./full_node: not found
/go/bin/run_test.sh: line 7: ./full_node: not found
更新 2 所以在我的 Dockerfile 中我创建了
FROM alpine
COPY --from=builder /go/bin/signal_server /go/bin/signal_server
COPY --from=builder /go/bin/full_node /go/bin/full_node
COPY run_test.sh /go/bin
COPY entry_point.sh /
ENTRYPOINT ["./entry_point.sh"]
entry_point.sh - 在根目录中有 entry_point.sh。如果我使用 ENTRYPOINT - 它说
standard_init_linux.go:190: exec 用户进程导致“没有这样的文件或目录”
【问题讨论】: