如何在docker中监听端口?

Lea*_*ira 1 linux shell docker devops

我正在尝试配置一个 docker 文件以在脚本准备好后运行它。

基本上我希望我的微服务能够等到另一个服务可以启动。我正在遵循一本书中的教程,所以我有这个 dockerfile:

FROM openjdk:8-jdk-alpine
RUN  apk update && apk upgrade && apk add netcat-openbsd
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/theexplorer/theexplorer.jar
ADD run.sh run.sh
RUN chmod +x run.sh
CMD ./run.sh
EXPOSE 8761
Run Code Online (Sandbox Code Playgroud)

我有这个脚本(run.sh):

echo "********************************************************"
echo "Waiting for the configuration server to start on port $CONFIGSERVER_PORT"
echo "********************************************************"
while ! `nc -z configserver $CONFIGSERVER_PORT `; do sleep 3; done
echo ">>>>>>>>>>>> Configuration Server has started"
java -jar /usr/share/theexplorer/theexplorer.jar
Run Code Online (Sandbox Code Playgroud)

但 $CONFIGSERVER_PORT 的值为空。我不知道这个变量应该如何可用,因为我在调用 run.sh 时没有传递任何参数。那么,我应该如何设置$CONFIGSERVER_PORT?有没有什么聪明的方法可以知道我的服务所依赖的服务的端口?

任何帮助表示赞赏!

blu*_*res 5

docker run -itd -p 5555:8761 myimage/myimage将主机端口 5555 映射到容器端口 8761。它对于您正在等待的“其他”服务的工作原理相同,因此此时您不依赖于动态主机端口映射。这样您就可以知道每个服务的端口。

在这种情况下,您正在运行的服务容器可以在 localhost:5555 上访问。