Mes configurations de docker ressemblent à ceci:
docker-compose.yml
version: '3.5'
services:
nginx:
ports:
- 8080:8080
docker-compose.prod.yml
version: '3.5'
services:
nginx:
ports:
- 80:80
Maintenant, quand je lance la commande: docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
, le nginx expose sur la machine hôte deux ports: 8000
et 80
, car il fusionne les propriétés des ports:
version: '3.5'
services:
nginx:
ports:
- 8080:8080
- 80:80
Y at-il un moyen de le remplacer? Je veux exposer uniquement le port 80
Ce comportement est documenté à https://docs.docker.com/compose/extends/#adding-and-overriding-configuration
Pour les options à valeurs multiples
ports
,expose
,external_links
,dns
,dns_search
ettmpfs
, Compose concatène les deux ensembles de valeurs
Étant donné que ports
sera la concaténation des ports dans tous vos fichiers de composition, nous vous suggérons de créer un nouveau fichier docker-compose.dev.yml
contenant vos mappages de ports de développement, en les supprimant du fichier docker-compose.yml
de base.
Comme le dit Nikson, vous pouvez nommer ce docker-compose.override.yml
pour appliquer votre configuration de développement automatiquement sans chaîner les fichiers composés en dock. docker-compose.override.yml
ne sera pas appliqué si vous spécifiez manuellement un autre fichier de remplacement (par exemple docker-compose -f docker-compose.yml -f docker-compose.prod.yml
)
Utilisez le fichier .override.yml
pour remplacer les propriétés et une séparation claire des propriétés doit être remplacée
docker-compose.override.yml
ex:
version: '3.5'
services:
nginx:
ports:
- 80:80
Défaut:
docker-compose up
utilisera vos fichiers docker-compose.yml
et docker-compose.override.yml
Référence: docker-composer plusieurs composer