Docker build -ttest_1を試しています。 、しかし、このエラーがあります:
パッケージdocker_test/MULT:認識されていないインポートパス「docker_test/MULT」(ホスト名で始まっていないインポートパス)
コマンド '/ bin/sh -c go get -d -v。/ ...'はゼロ以外のコードを返しました:1
私のdockerfile(パス/ gowork/src/Dockerfile):
FROM golang:1.9.1
COPY ./docker_test/mult /go/src/app
WORKDIR go/src/app
COPY ./docker_test/main.go .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
ENTRYPOINT ["app", "-f=7", "-s=9"]
main.go(パス:gowork/src/docker_test/main.go)
package main
import (
"docker_test/mult"
"fmt"
)
func main() {
fmt.Println("From different pkg")
mult.Multiple()
}
mult.go(パス:gowork/src/docker_test/mult/mult.go)
package mult
import (
"flag"
"fmt"
)
func Multiple() {
first := flag.Int("f", 0, "placeholder")
second := flag.Int("s", 0, "placeholder")
flag.Parse()
out := (*first) * (*second)
fmt.Println(out)
}
go get
パッケージdocker_test/mult
を/go
パスに見つけようとしています。しかし、あなたは/go/src/app
にコピーしました。そのため、go get
はパッケージをローカルで見つけることができず、パッケージがgithubなどのリモートリポジトリからのものであると想定し、エラーimport path does not begin with hostname
をスローします。したがって、docker_test/mult
パス内の/go
をコピーします。
もう1つの懸念は、WORKDIR go/src/app
を使用すると、go/src/app
パス内に/go
が作成されるため、最終的にパスが/go/go/src/app
になることです。したがって、絶対パス、つまりWORKDIR /go/src/app
を使用します。
これを試してくださいdockerfile
:
FROM golang:1.9.1
COPY ./docker_test/mult /go/src/docker_test/mult
WORKDIR /go/src/app
COPY ./docker_test/main.go .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
ENTRYPOINT ["app", "-f=7", "-s=9"]
必ずGOPATHを設定してください。この例では、インポートでdocker_test/multを使用しているため、コンパイラーがそれを解決するには、GOPATH/docker_test/multに配置します。
私はあなたのDockerfileを微調整したので、あなたはそれを膨らませることができるはずです
Dockerfile
FROM golang:1.9.1
ENV GOPATH /go
FROM golang:1.9.1
COPY ./docker_test /go/src/docker_test
COPY ./docker_test/main.go /go/src/app/main.go
WORKDIR /go/src/app
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
ENTRYPOINT ["app", "-f=7", "-s=9"]