我试图让我的小go应用程序(pub/sub)在docker中工作,所以我可以把它放在GKE中,但由于某些原因我无法让auth工作。
docker run --rm -it gcr.io/snappy-premise-118915/sensorgen:v1
{"pressure":24.10712641247902,"temperature":70.24302653595491,"dewpoint":41.3666446148299,"timecollected":"","latitude":-121.47104803040895,"longitude":0.007102469057958554,"humidity":19.463373213885937,"sensorId":"","zipcode":0}
2018/08/02 07:37:14 Failed to publish: context deadline exceeded我像这样创建dockerfile:
FROM golang:1.8-alpine
COPY ./ /src
ENV LATITUDE = "-121.464"
ENV LONGITUDE = "36.9397"
ENV SENSORID = "sensor1234"
ENV ZIPCODE = "95023"
ENV INTERVAL = "3"
ENV GOOGLE_CLOUD_PROJECT = "snappy-premise-118915"
RUN apk add --no-cache git && \
cd /src && \
go get -t -v cloud.google.com/go/pubsub && \
CGO_ENABLED=0 GOOS=linux go build main.go
# final stage
FROM alpine
ENV LATITUDE "-121.464"
ENV LONGITUDE "36.9397"
ENV SENSORID "sensor1234"
ENV ZIPCODE "95023"
ENV INTERVAL "3"
ENV GOOGLE_CLOUD_PROJECT "snappy-premise-118915"
ENV GOOGLE_APPLICATION_CREDENTIALS "/app/key.json"
WORKDIR /app
COPY --from=0 /src/main /app/
COPY --from=0 /src/key.json /app/
ENTRYPOINT /app/main当我获得数据输出时,应用程序确实会启动,但当它试图发布到pubsub时,它似乎会抛出以下错误:2018/08/02 07:37:14 Failed to publish: context deadline exceeded
-更新
我更改了Dockerfile文件,添加了x509证书,但仍然有证书问题,看起来是这样的:
{"pressure":24.13764705280961,"temperature":70.30698990487159,"dewpoint":40.44394673486464,"timecollected":"","latitude":-121.47166212174045,"longitude":0.005826195394839833,"humidity":19.821878333280246,"sensorId":"","zipcode":0}
INFO: 2018/08/02 13:58:09 ccResolverWrapper: sending new addresses to cc: [{pubsub.googleapis.com:443 0 <nil>}]
INFO: 2018/08/02 13:58:09 balancerWrapper: got update addr from Notify: [{pubsub.googleapis.com:443 0} {pubsub.googleapis.com:443 1} {pubsub.googleapis.com:443 2} {pubsub.googleapis.com:443 3}]
WARNING: 2018/08/02 13:58:09 grpc: addrConn.createTransport failed to connect to {pubsub.googleapis.com:443 0 3}. Err :connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided". Reconnecting...Docker文件:
FROM golang:1.8-alpine
COPY ./ /src
ENV LATITUDE = "-121.464"
ENV LONGITUDE = "36.9397"
ENV SENSORID = "sensor1234"
ENV ZIPCODE = "95023"
ENV INTERVAL = "3"
ENV GOOGLE_CLOUD_PROJECT = "snappy-premise-118915"
RUN apk add --no-cache git && \
apk --no-cache --update add ca-certificates && \
cd /src && \
go get -t -v cloud.google.com/go/pubsub && \
CGO_ENABLED=0 GOOS=linux go build main.go
# final stage
FROM alpine
ENV LATITUDE "-121.464"
ENV LONGITUDE "36.9397"
ENV SENSORID "sensor1234"
ENV ZIPCODE "95023"
ENV INTERVAL "3"
ENV GOOGLE_CLOUD_PROJECT "snappy-premise-118915"
ENV GOOGLE_APPLICATION_CREDENTIALS "/app/key.json"
ENV GRPC_GO_LOG_SEVERITY_LEVEL "INFO"
WORKDIR /app
COPY --from=0 /src/main /app/
COPY --from=0 /src/key.json /app/
ENTRYPOINT /app/main
EXPOSE 8080-更新
更改了图像上的docker文件,但仍然无法执行:
2018/08/02 14:10:40 Could not create pubsub Client: pubsub: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: open /key.json: no such file or directorydockerfile
FROM golang:1.8 as build-env
WORKDIR /go/src/app
ADD . /go/src/app
COPY key.json /
RUN go-wrapper download # "go get -d -v ./..."
RUN go-wrapper install
# final stage
FROM gcr.io/distroless/base
ENV LATITUDE "-121.464"
ENV LONGITUDE "36.9397"
ENV SENSORID "sensor1234"
ENV ZIPCODE "95023"
ENV INTERVAL "3"
ENV GOOGLE_CLOUD_PROJECT "snappy-premise-118915"
ENV GOOGLE_APPLICATION_CREDENTIALS "/key.json"
ENV GRPC_GO_LOG_SEVERITY_LEVEL "INFO"
COPY --from=build-env /go/bin/app /
CMD ["/app"]发布于 2018-11-29 02:57:22
看起来您使用的是多阶段构建(https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds)。
在最初的构建中,您添加了一些文件。但是,当您进入下一阶段时,您需要复制它们。因此,您可以使用COPY --from=0语句完成此操作,也可以简单地将ADD和COPY语句移到最后阶段。
https://stackoverflow.com/questions/51648712
复制相似问题