docker stack deploy
コマンドが実行された場所から取得された環境変数の代わりに、コンテナがデプロイされたホストから取得された環境変数を使用する方法があるかどうか疑問に思いました。たとえば、次のdocker-compose.yml
が3ノードのDocker Swarmクラスターで起動されたとします。
version: '3.2'
services:
kafka:
image: wurstmeister/kafka
ports:
- target: 9094
published: 9094
protocol: tcp
mode: Host
deploy:
mode: global
environment:
KAFKA_JMX_OPTS: "-Djava.rmi.server.hostname=${JMX_HOSTNAME} -Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.rmi.port=1099"
JMX_HOSTNAME
は、コンテナが実際にデプロイされているホストから取得する必要があり、すべてのコンテナで同じ値にすることはできません。これを行う正しい方法はありますか?
はい、これは2つの概念を組み合わせたときに機能します。
これにより、各コンテナーが実行されているホストになるために、ホスト名がDUDEのENV値に引き込まれます。
version: '3.4'
services:
nginx:
image: nginx
environment:
DUDE: "{{.Node.Hostname}}"
deploy:
replicas: 3