1

次のようにスケーリングされた 2 つの Web コンテナーがあるとします。

docker-compose scale web=2

Web コンテナーは次のように実行されます (Dockerfile から)。

ENTRYPOINT [ "java", "-jar", "/app/my-jar-server-1.0.jar" ]

2 つの異なる組み込み tomcat が異なるポートを確実にリッスンするための最良の戦略は何ですか (たとえば、Heroku のようなインフラストラクチャを構築したい場合: foreman を参照)。

つまり、両方のコンテナが同じポートをリッスンするため、競合が発生します。

理想的には、2 つの tomcat インスタンスへのリクエストをラウンドロビンする必要があります。ツールやアイデアを探しています...

編集1

これが私が試したことです:

docker-compose.yml から:

loadbalancer:
  image: haproxy
  links:
      - web
  ports:
      - "8080:8080"
web:
  build: ./web

./web/Dockerfile から:

FROM java:8
ADD ./bignibou-server-1.0.jar /app/bignibou-server-1.0.jar
ADD ./spring-cloud.properties /app/spring-cloud.properties
ENV SPRING_CLOUD_PROPERTIESFILE=/app/spring-cloud.properties
ENV SPRING_PROFILES_ACTIVE=cloud
ENV SPRING_CLOUD_APP_NAME=bignibou
ENV CLEARDB_DATABASE_URL=mysql://root:root@localhost:3306/bignibou_dev
ENV REDISCLOUD_URL=redis://dummy:dummy@localhost:6379
ENV DYNO=dummy
EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/app/bignibou-server-1.0.jar" ]

ここに私が得るものがあります:

loadbalancer_1 | [ALERT] 091/105717 (1) : Could not open configuration file /usr/local/etc/haproxy/haproxy.cfg : No such file or directory
dockertests_loadbalancer_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)
Stopping dockertests_web_1...
Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
  File "/code/build/docker-compose/out00-PYZ.pyz/threading", line 552, in __bootstrap_inner
  File "/code/build/docker-compose/out00-PYZ.pyz/threading", line 505, in run
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.multiplexer", line 41, in _enqueue_output
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.log_printer", line 62, in _make_log_generator
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.container", line 139, in wait
  File "/code/build/docker-compose/out00-PYZ.pyz/docker.client", line 999, in wait
  File "/code/build/docker-compose/out00-PYZ.pyz/docker.client", line 78, in _post
  File "/code/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 425, in post
  File "/code/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 383, in request
  File "/code/build/docker-compose/out00-PYZ.pyz/requests.sessions", line 486, in send
  File "/code/build/docker-compose/out00-PYZ.pyz/requests.adapters", line 374, in send
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'error'

編集 2 : 編集 1 を無視してください。問題を再現できませんでした。

ただし、Tomcat で 2 つのインスタンスを正常に開始できましたが、ブラウザーを介してそれらにアクセスしようとしました。

http://172.17.42.1:8080/

無駄に。誰か助けてくれませんか?

4

1 に答える 1

1

最も簡単な方法 (Consul ルートをたどらない) は、「web」コンテナーを認識するように「loadbalancer」コンテナーをセットアップすることです。

web:
  image: tomcat

loadbalancer:
  image: haproxy
  links:
      - web
  ports:
      - "8080:8080"

docker-compose ドキュメント、特に「リンク」のセクションを試してください: https://docs.docker.com/compose/yml/#links

于 2015-04-02T00:03:29.640 に答える