我在自定义端口 (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