สเกลนักเทียบท่าพร้อมการเชื่อมต่อพอร์ตที่กำหนดขึ้น


14

ฉันต้องการไต่wildflyคอนเทนเนอร์ที่มีการเปิดเผยหลายพอร์ตด้วยผลลัพธ์ที่กำหนดขึ้น

นักเทียบท่า-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"

Dockerfile

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}/

สั่งให้เริ่ม

docker-compose up --build --force-recreate --scale wildfly-server=10

มันเกือบจะทำงานได้ตามที่ฉันต้องการ แต่มีความแตกต่างของพอร์ต เมื่อฉันสร้างคอนเทนเนอร์ฉันต้องการให้พวกเขามีพอร์ตที่เพิ่มขึ้นสำหรับแต่ละคอนเทนเนอร์ที่จะเปิดเผยดังนี้:

machine_1 8001, 8101, 82001
machine_2 8002, 8102, 82002
machine_3 8003, 8103, 82003 

แต่สิ่งที่ฉันได้รับเป็นผลนั้นไม่ได้กำหนดไว้และมีลักษณะเช่นนี้:

machine_1 8001, 8102, 82003
machine_2 8002, 8101, 82001
machine_3 8003, 8103, 82002 

ปัญหาคือทุกครั้งที่ฉันรันคำสั่งการเรียบเรียงพอร์ตจะแตกต่างกันสำหรับแต่ละคอนเทนเนอร์

ตัวอย่างผลลัพธ์:

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

คำถาม

มีวิธีใดที่จะทำให้การแจกจ่ายพอร์ตเป็นไปอย่างแน่นอน? ชอบปิดการใช้งานการทำงานแบบขนานเพื่อตรวจสอบพอร์ตอนุกรมที่มีอยู่หรือวิธีอื่นใดหรือไม่ ทางเลือกเดียวที่ฉันพบคือมีyml เทมเพลตและสร้างไฟล์ที่จำเป็นทั้งหมด (เช่น 10 ถ้าฉันต้องการ 10 คอนเทนเนอร์เป็นต้น) มีทางเลือกอื่นหรือไม่?


ถ้าคุณใช้เซิร์ฟเวอร์ CI เช่น jenkins คุณสามารถจัดการได้ง่ายๆ
LinPy

สภาพแวดล้อมไม่ใช่สิ่งที่ถูกแก้ไข โดยทั่วไปเป้าหมายจะปรากฏขึ้นที่ใดก็ได้ตามต้องการ ฉันสามารถแก้ไขได้ด้วยymlเทมเพลตที่กล่าวถึงด้วยตัวแปรสภาพแวดล้อมที่แตกต่างกัน แต่ฉันสนใจว่ามีวิธีใดที่จะใช้--scaleเพื่อทำเช่นนั้น
แฮช

มีเหตุผลอะไรที่ทำให้คุณใช้งานโหมด Swarm?
eez0

คุณจะใช้โหมดจับกลุ่มเพื่อสร้างหลายอินสแตนซ์ด้วยพอร์ตตามลำดับและการเชื่อมพอร์ตที่กำหนดได้อย่างไร
แฮช

คุณต้องการเรียกใช้หลายอินสแตนซ์เมื่อคุณส่งคำขอมันจะไปยังหนึ่งในอินสแตนซ์ที่มีอยู่ นี่เป็นพฤติกรรมที่คุณต้องการหรือไม่?
Keaz

คำตอบ:


3

ไม่ได้ในขณะนี้คุณไม่สามารถ (10/14/19) ทำการเลือกพอร์ตที่กำหนดไว้ในไฟล์เขียนสำหรับนักเทียบท่า พฤติกรรมนี้ได้รับการร้องขอในปัญหา Github # 722และ# 1247แต่ปัญหาเหล่านั้นถูกปิดโดยไม่ได้นำปัญหามาใช้

หากคุณต้องการปรับขนาดแอปพลิเคชั่นแบบกึ่งเสียงดูเหมือนว่าคุณทำคุณจะต้องแก้ปัญหานี้ด้วยวิธีอื่น .ymlแนวคิดการสร้างแรงบันดาลใจของคุณดูเหมือนว่า IMO ที่เป็นโซลูชั่นที่สะอาดที่สุด

คุณแน่ใจหรือว่าต้องการพอร์ตที่กำหนดไว้ หากคุณใช้ reverse proxy เช่น nginx ที่ฟังบนพอร์ตโฮสต์หนึ่งและโหลดยอดคงเหลือระหว่างคอนเทนเนอร์นักเทียบท่าทั้งหมดของคุณนั่นจะใช้ได้กับกรณีการใช้งานของคุณหรือไม่? การตั้งค่าตัวโหลดบาลานซ์ nginx ในคอนเทนเนอร์นักเทียบท่าค่อนข้างตรงไปตรงมา ฉันขอแนะนำให้คุณดูที่และถ้าคุณยังคงต้องการวิธีที่กำหนดไว้สำหรับผู้เรียกเพื่อทราบพอร์ตของบริการเพื่อให้สามารถส่งคำขอไปยังเซิร์ฟเวอร์ที่ระบุซ้ำ ๆ กันไปกับ.ymlโซลูชัน templating หรือกระบวนการค้นหาบริการบางอย่างแยกจากกัน การกำหนดค่านักเขียนประกอบ


ขอบคุณสำหรับการเชื่อมโยงฉันผิดหวังเล็กน้อยที่พวกเขาไม่ได้แก้ไขปัญหา ... ฉันต้องการปรับขนาดโดยอัตโนมัติ :) ฉันต้องการพอร์ตที่กำหนดขึ้นเพื่อสร้างไฟล์บางไฟล์ก่อนที่คอนเทนเนอร์จะอัพ (แต่ละพอร์ตควรมีไว้สำหรับผู้ใช้ที่แตกต่างกันดังนั้นอย่างที่ฉันคอมเม้นต์ไว้ก่อนที่จะทำการโหลดบาลานซ์ไม่ใช่ตัวเลือก) ข้อมูลที่คุณแบ่งปันจึงเป็นเหมือนความคิดเห็นไม่ใช่คำตอบ
แฮช

ดังนั้นในกรณีนี้คุณไม่ได้ "ปรับขนาดแบบไดนามิก" ในลักษณะที่นักแต่งเพลงและนักเทียบท่าพร้อมที่จะจัดการ พวกเขาจะคาดหวังว่ากรณีของการบริการของคุณที่จะใช้แทนกันได้อย่างเต็มที่และในกรณีของคุณพวกเขาไม่ได้ ... คุณอาจต้องชนิดของการค้นพบกลไกการบริการหรือการกำหนดกำหนดของพอร์ตบางและผมคิดว่าคุณ.ymlวิธีการสร้างแม่แบบเป็นเร็วที่สุดง่ายที่สุด สารละลาย. และ btw ฉันตอบคำถามของคุณทางเทคนิคว่า "มีวิธีใดบ้างที่จะทำให้การจัดสรรพอร์ตกำหนดขึ้นได้?" :) แต่ฉันขอโทษที่ฉันไม่สามารถแนะนำทางออกที่เป็นประโยชน์เพิ่มเติม
Brendan Goggin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.