Has*_*ash 14 docker docker-compose
我想缩放wildfly
暴露了多个端口并具有确定性结果的容器。
docker-compose.yml
version: '3'
services:
wildfly-server:
build:
context: .
dockerfile: Dockerfile
args:
admin_user: admin
admin_password: admin
deploy:
resources:
limits:
memory: 1.5G
cpus: "1.5"
restart: always
ports:
- "8000-8099:8080"
- "8100-8199:9990"
- "8200-8299:8787"
expose:
- "8080"
- "9990"
- "8787"
Run Code Online (Sandbox Code Playgroud)
Docker文件
FROM jboss/wildfly:16.0.0.Final
# DOCKER ENV VARIABLES
ENV WILDFLY_HOME /opt/jboss/wildfly
ENV STANDALONE_DIR ${WILDFLY_HOME}/standalone
ENV DEPLOYMENT_DIR ${STANDALONE_DIR}/deployments
ENV CONFIGURATION_DIR ${STANDALONE_DIR}/configuration
RUN ${WILDFLY_HOME}/bin/add-user.sh ${admin_user} ${admin_password} --silent
# OPENING DEBUG PORT
RUN rm ${WILDFLY_HOME}/bin/standalone.conf
ADD standalone.conf ${WILDFLY_HOME}/bin/
# SET JAVA ENV VARS
RUN rm ${CONFIGURATION_DIR}/standalone.xml
ADD standalone.xml ${CONFIGURATION_DIR}/
Run Code Online (Sandbox Code Playgroud)
启动命令
docker-compose up --build --force-recreate --scale wildfly-server=10
Run Code Online (Sandbox Code Playgroud)
它几乎可以按我的意愿工作,但是端口之间存在一些差异。创建容器时,我希望它们为每个容器提供增量端口,如下所示:
machine_1 8001, 8101, 82001
machine_2 8002, 8102, 82002
machine_3 8003, 8103, 82003
Run Code Online (Sandbox Code Playgroud)
但是我得到的结果不是确定性的,看起来像这样:
machine_1 8001, 8102, 82003
machine_2 8002, 8101, 82001
machine_3 8003, 8103, 82002
Run Code Online (Sandbox Code Playgroud)
问题是每次我运行compose up命令时,每个容器的端口都不同。
输出示例:
CONTAINER ID COMMAND CREATED STATUS PORTS NAMES
0232f24fbca4 "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8028->8080/tcp, 0.0.0.0:8231->8787/tcp, 0.0.0.0:8126->9990/tcp wildfly-server_7
13a6a365a552 "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8031->8080/tcp, 0.0.0.0:8230->8787/tcp, 0.0.0.0:8131->9990/tcp wildfly-server_10
bf8260d9874d "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8029->8080/tcp, 0.0.0.0:8228->8787/tcp, 0.0.0.0:8129->9990/tcp wildfly-server_6
3d58f2e9bdfe "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8030->8080/tcp, 0.0.0.0:8229->8787/tcp, 0.0.0.0:8130->9990/tcp wildfly-server_9
7824a73a09f5 "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8027->8080/tcp, 0.0.0.0:8227->8787/tcp, 0.0.0.0:8128->9990/tcp wildfly-server_3
85425462259d "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8024->8080/tcp, 0.0.0.0:8224->8787/tcp, 0.0.0.0:8124->9990/tcp wildfly-server_2
5be5bbe8e577 "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8026->8080/tcp, 0.0.0.0:8226->8787/tcp, 0.0.0.0:8127->9990/tcp wildfly-server_8
2512fc0643a3 "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8023->8080/tcp, 0.0.0.0:8223->8787/tcp, 0.0.0.0:8123->9990/tcp wildfly-server_5
b156de688dcb "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8025->8080/tcp, 0.0.0.0:8225->8787/tcp, 0.0.0.0:8125->9990/tcp wildfly-server_4
3e9401552b0a "/opt/jboss/wildfly/…" 5 minutes ago Up 5 minutes 0.0.0.0:8022->8080/tcp, 0.0.0.0:8222->8787/tcp, 0.0.0.0:8122->9990/tcp wildfly-server_1
Run Code Online (Sandbox Code Playgroud)
题
有什么方法可以确定端口分配吗?像禁用并行运行以对可用端口或任何其他方法进行串行检查一样?我发现的唯一选择是拥有一个yml
模板并生成所有必需的文件(如果需要10个容器,则生成10个文件,等等)。有其他解决方案吗?
不可以,您目前 (10/14/19) 无法在 docker-compose 文件中确定端口选择。Github 问题#722和#1247中请求了此行为,但这些问题在问题未得到实施的情况下就已关闭。
如果您想像听起来那样半动态地扩展应用程序,那么您需要以另一种方式解决这个问题。在我看来,你的.yml
模板想法听起来像是最干净的解决方案。
您确定需要端口具有确定性吗?如果您使用像 nginx 这样的反向代理来侦听一个主机端口并平衡所有 docker 容器之间的负载,这是否适合您的用例?在 Docker 容器中设置 nginx 负载均衡器非常简单。我建议您研究一下,如果您仍然需要一种确定的方式让调用者知道服务的端口,以便它可以重复向特定服务器发送请求,那么请使用您的.yml
模板解决方案或某种与docker-compose 配置。
归档时间: |
|
查看次数: |
189 次 |
最近记录: |