我已经在自定义端口(8080)上的 docker 容器中运行了 Web 服务。在这里,我正在尝试运行一个容器,暴露相关容器的端口(如此处所示),但无济于事。
docker run -p 127.0.0.1:8080:8080 beatthemarket run wait
但我似乎无法到达那个 Web 服务端点。
i)我是否正确地暴露了容器的端口?ii)如果端口不可用,或者我的 Web 服务没有被调用(如果能够进入容器并卷曲端点,那就太好了)。
我的 Dockerfile 可以在这里看到。我正在使用 Adzerk 的boot-clj基础映像。
实际运行docker,每次取回一堆jar。然后启动块(wait
任务),这就是我想要的(网络服务器将处理网络请求)。这就是我迷路的地方。在 docker 中启动,按照我的要求进行阻止。但我似乎无法获得根 URI应返回的基本Hello World消息。
$ 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.
Chrome,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.
您需要将该
EXPOSE
语句添加到 Dockerfile 中以获取端口 8080。这是来自 Docker 的参考:https ://docs.docker.com/engine/reference/builder/#expose
您的最终 Dockerfile 应该如下所示:
-p 开关会在你的主机上打一个洞,桥接到你的 docker 实例,-p host_port:docker_instance_port
现在你必须找出你的 docker 主机驻留在哪里。如果您使用的是 VirtualBox,请尝试运行:
码头机器环境
http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html