如何在 Docker 中为基于 WebUI 的应用程序正确 expose/publish 端口?

How to properly expose/publish ports for a WebUI-based application in Docker?

我正在尝试将 this webapp 移植到 Docker。我写了以下 Docker 文件:

FROM anapsix/alpine-java
MAINTAINER <name>
COPY aard2-web-0.7-java6.jar /home/aard2-web-0.7-java6.jar
COPY start.sh /home/start.sh
CMD ["bash", "/home/start.sh"]
EXPOSE 8013/tcp

这里是start.sh的内容:

#!/bin/bash
java -Dslobber.browse=true -jar /home/aard2-web-0.7-java6.jar /home/dicts/*.slob

然后我构建了镜像:

docker build -t aard2-docker .

我使用以下命令 运行 容器:

docker run --name Aard2 -p 127.0.0.1:8013:8013 -v /home/<name>/dicts:/home/dicts aard2-docker

该应用 运行 正常,提示它正在 http://127.0.0.1:8013 监听。然而,我打开地址却发现无法连接到应用程序。 我尝试使用 EXPOSE 命令(如上面的 Docker 文件片段所示)和 -p 标志的变体,例如 -p 127.0.0.1:8013:8013-p 8013:8013-p 8013:8013/tcp,但其中 none 有效。

我怎样才能 expose/publish 端口正确地连接到 127.0.0.1?谢谢!

原作者回复如下:

you need to tell the server to listen on all network interfaces instead of localhost - that is you are missing -Dslobber.host=0.0.0.0

this works for me:

FROM anapsix/alpine-java
COPY ./build/libs/aard2-web-0.7.jar /home/aard2-web-0.7.jar
CMD ["bash", "-c", "java -Dslobber.host=0.0.0.0 -jar /home/aard2-web-0.7.jar /dicts/*.slob"]
EXPOSE 8013/tcp

and then run like this:

docker run -v $HOME/Downloads:/dicts -p 8013:8013 --rm aard2-web

-Dslobber.browse=true opens default browser, I don't think this has any effect in docker so don't need that.

https://github.com/itkach/aard2-web/issues/12#issuecomment-895557949