私は次のようなdocker-compose.ymlを持っています:
networks:
smstake:
ipam:
config:
- subnet: 10.0.10.0/24
services:
app:
image: smstake:latest
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
スウォームモードで実行されているノードにサービスをデプロイするために使用しています。
イメージがビルドされるたびに、ユーザーが渡したブランチ名またはイメージのタグとして機能するタグ名に基づいて、イメージ名が異なる場合があります。私はジェンキンスからそれを実行しています。例:smstake:
サービスの画像パラメーターに画像名を動的に追加するにはどうすればよいですか。 Dockerスタックはビルドをサポートしていないため。使用すらできません。私はそれを行う正しい方法を理解することができません。
docker stack deploy -c docker-compose.yml stackname
で展開しようとしています
私の正確な要件は:
新しいTAGの新しいイメージを作成する理由は、以前にビルドしたイメージにロールバックできるようにするためです。
一部編集:配置コマンドが実行される前に配置ジョブのエコーコマンドを使用して渡されるconfiguration.envファイルに追加するイメージ名を追加しました。 docker-composeは次のようになります
version: '3.4'
networks:
smstake:
services:
db:
image: mysql:5.7
networks:
- smstake
ports:
- "3306"
env_file:
- configuration.env
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
deploy:
mode: replicated
replicas: 1
app:
env_file:
- configuration.env
image: ${SMSTAKE_VERSION}
ports:
- 8000:80
networks:
- smstake
depends_on:
- db
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
mysql_data:
Configuration.envファイルから読み取らないのはなぜですか、そのキーに正しい値が設定されています。エラーメッセージ
サービスの作成smstake_appはサービスsmstake_appの作成に失敗しました:デーモンからのエラー応答:rpcエラー:コード= InvalidArgument desc = ContainerSpec:イメージ参照を提供する必要がありますビルドステップ「シェルの実行」とマークされたビルド失敗終了時:FAILURE
Docker-composeファイルでは、環境変数に基づいて変数の代替を指定できます。これは Variable Substitution で文書化されています。
以下を使用して、イメージに別のバージョンを指定できます。
image: smstake:${SMSTAKE_VERSION}
デプロイするjenkinsジョブ内で、この環境変数を設定してdocker stackコマンドを実行するだけです。
SMSTAKE_VERSION=v1.2.0 docker stack deploy -c docker-compose.yml stackname