我正在docker中构建golang WebService。构建似乎很好,但我无法公开端口以进行外部(容器外部)访问。当我从命令行(在容器内部)卷曲时,该应用程序似乎可以正常工作。
我看到了很多类似问题的帖子,但是不幸的是,许多帖子没有解决或似乎不适用。
FROM golang:alpine
RUN mkdir /go/src/webservice_refArch
ADD . /go/src/webservice_refArch
WORKDIR /go/src/webservice_refArch
RUN apk add curl
RUN cd /go/src/webservice_refArch/ && go get ./...
RUN cd /go/src/webservice_refArch/cmd/reference-w-s-server && go build -o ../../server
EXPOSE 7878
ENTRYPOINT ["./server", "--port=7878"]
我都尝试过:
答案 0 :(得分:2)
请参见https://docs.docker.com/engine/reference/run/#expose-incoming-ports,仅在dockerfile中公开端口是不够的。
您可以在启动容器时添加-p 7878:7878
,或使用-P
让docker为您设置自动主机端口映射。
如果您不想执行上述操作,也可以在启动容器时添加--net=host
,然后容器将使用主机的网络,如果您也可以使用的话。
答案 1 :(得分:0)
如果您尝试从本地计算机访问docker容器内的端口,则需要将其映射到本地计算机上的所需端口
INSERT INTO newtable partition(Col21)
SELECT Col1, Col2, Col3.....Col20, unix_timestamp() AS Col21
FROM oldTable
然后,您应该可以在主机上访问它了
答案 2 :(得分:0)
我遇到了同样的问题。然后我所做的是将 ListernHost 从 localhost 更改为 0.0.0.0 并且它起作用了。
为了调试这个在容器内尝试过的 curl,它工作正常,但在容器外,curl 的响应是空白的。端口已映射,但内容未在容器外提供。将“localhost”更改为 0.0.0.0 后,它将起作用。