如何在docker容器中公开端口

如何在docker容器中公开端口

我在自定义端口 (8080) 上的 Docker 容器中运行了一个 Web 服务。在这里,我尝试运行一个容器,并公开相关容器的端口(如看到这里),但无济于事。

docker run -p 127.0.0.1:8080:8080 beatthemarket run wait

但我似乎无法到达该 Web 服务端点。

我)我是否正确地暴露了容器的端口?二)如果是端口不可用,或者我的 Web 服务没有被调用,该如何进行故障排除(如果能够进入容器并卷曲端点就好了)。

我可以看到我的 Dockerfile这里. 我正在使用 Adzerk 的引导clj基础图像。

实际运行docker,每次都会检索一堆jar。然后引导阻止(wait任务),这正是我想要的(Web 服务器将处理 Web 请求)。这就是我迷茫的地方。在 docker 中,Boot 按照我的要求阻止了。但我似乎无法获得基本的你好世界根 URI 的消息应该返回

$ docker run -p 127.0.0.1:8080:8080 beatthemarket run wait
Downloading https://github.com/boot-clj/boot/releases/download/2.5.5/boot.jar...
Retrieving dynapath-0.2.3.jar from https://clojars.org/repo/
Retrieving pod-2.5.5.jar from https://clojars.org/repo/
Retrieving shimdandy-impl-1.2.0.jar from https://repo1.maven.org/maven2/
Retrieving core-2.5.5.jar from https://clojars.org/repo/
...
Implicit target dir is deprecated, please use the target task instead.
Set BOOT_EMIT_TARGET=no to disable implicit target dir.

铬合金、curl 和 wget 都说连接被拒绝。

$ curl http://127.0.0.1:8080/
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused

$ wget http://127.0.0.1:8080/
--2016-04-21 20:07:32--  http://127.0.0.1:8080/
Connecting to 127.0.0.1:8080... failed: Connection refused. 

答案1

您需要将EXPOSE端口 8080 的语句添加到您的 Dockerfile 中。

以下是来自 Docker 的参考:https://docs.docker.com/engine/reference/builder/#expose

最终的 Dockerfile 应如下所示:

FROM adzerk/boot-clj

EXPOSE 8080

WORKDIR /app
COPY . /app

答案2

-p 开关将通过主机桥接至 docker 实例,-p host_port:docker_instance_port

现在你必须找出你的docker主机驻留在何处。如果你使用的是VirtualBox,请尝试运行:

docker-machine 环境

http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html

相关内容