web-dev-qa-db-fra.com

docker compose remplace une propriété de ports au lieu de la fusionner

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

9
feerlay

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 et tmpfs, 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)

5
Rach Sharp

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

0
Nikson Kanti Paul