Éléments de niveau supérieur networks
Les réseaux permettent aux services de communiquer entre eux. Par défaut, Compose configure un réseau unique pour votre application. Chaque conteneur d'un service rejoint le réseau par défaut et est à la fois accessible par d'autres conteneurs sur ce réseau, et détectable par le nom du service. L'élément de niveau supérieur networks
vous permet de configurer des réseaux nommés qui peuvent être réutilisés sur plusieurs services.
Pour utiliser un réseau à travers plusieurs services, vous devez explicitement accorder l'accès à chaque service en utilisant l'attribut networks dans l'élément de niveau supérieur services
. L'élément de niveau supérieur networks
a une syntaxe supplémentaire qui fournit un contrôle plus granulaire.
Exemples
Exemple de base
Dans l'exemple suivant, au moment de l'exécution, les réseaux front-tier
et back-tier
sont créés et le service frontend
est connecté aux réseaux front-tier
et back-tier
.
services:
frontend:
image: example/webapp
networks:
- front-tier
- back-tier
networks:
front-tier:
back-tier:
Exemple avancé
services:
proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
# Spécifier les options du pilote
driver: bridge
driver_opts:
com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
backend:
# Utiliser un pilote personnalisé
driver: custom-driver
L'exemple avancé montre un fichier Compose qui définit deux réseaux personnalisés. Le service proxy
est isolé du service db
, parce qu'ils ne partagent pas de réseau en commun. Seul app
peut parler aux deux.
Le réseau par défaut
Quand un fichier Compose ne déclare pas de réseaux explicites, Compose utilise un réseau default
implicite. Les services sans déclaration networks
explicite sont connectés par Compose à ce réseau default
:
services:
some-service:
image: foo
Cet exemple est en fait équivalent à :
services:
some-service:
image: foo
networks:
default: {}
networks:
default: {}
Vous pouvez personnaliser le réseau default
avec une déclaration explicite :
networks:
default:
name: a_network # Utiliser un nom personnalisé
driver_opts: # passer des options au pilote pour la création de réseau
com.docker.network.bridge.host_binding_ipv4: 127.0.0.1
Pour les options, voir la documentation Docker Engine.
Attributs
driver
driver
spécifie quel pilote devrait être utilisé pour ce réseau. Compose retourne une erreur si le pilote n'est pas disponible sur la plateforme.
networks:
db-data:
driver: bridge
Pour plus d'informations sur les pilotes et options disponibles, voir Pilotes de réseau.
driver_opts
driver_opts
spécifie une liste d'options comme paires clé-valeur à passer au pilote. Ces options sont dépendantes du pilote.
networks:
frontend:
driver: bridge
driver_opts:
com.docker.network.bridge.host_binding_ipv4: "127.0.0.1"
Consultez la documentation des pilotes de réseau pour plus d'informations.
attachable
Si attachable
est défini à true
, alors les conteneurs autonomes devraient pouvoir s'attacher à ce réseau, en plus des services. Si un conteneur autonome s'attache au réseau, il peut communiquer avec les services et autres conteneurs autonomes qui sont aussi attachés au réseau.
networks:
mynet1:
driver: overlay
attachable: true
enable_ipv4
enable_ipv4
peut être utilisé pour désactiver l'assignation d'adresse IPv4.
networks:
ip6net:
enable_ipv4: false
enable_ipv6: true
enable_ipv6
enable_ipv6
active l'assignation d'adresse IPv6.
networks:
ip6net:
enable_ipv6: true
external
Si défini à true
:
external
spécifie que le cycle de vie de ce réseau est maintenu en dehors de celui de l'application. Compose n'essaie pas de créer ces réseaux, et retourne une erreur si l'un n'existe pas.- Tous les autres attributs à part name sont non pertinents. Si Compose détecte un autre attribut, il rejette le fichier Compose comme invalide.
Dans l'exemple suivant, proxy
est la passerelle vers le monde extérieur. Au lieu de tenter de créer un réseau, Compose interroge la plateforme pour un réseau existant simplement appelé outside
et connecte les conteneurs du service proxy
à celui-ci.
services:
proxy:
image: example/proxy
networks:
- outside
- default
app:
image: example/app
networks:
- default
networks:
outside:
external: true
ipam
ipam
spécifie une configuration IPAM personnalisée. C'est un objet avec plusieurs propriétés, chacune étant optionnelle :
driver
: Pilote IPAM personnalisé, au lieu du pilote par défaut.config
: Une liste avec zéro ou plus éléments de configuration, chacun contenant :subnet
: Sous-réseau au format CIDR qui représente un segment de réseauip_range
: Plage d'IPs depuis laquelle allouer les IPs de conteneurgateway
: Passerelle IPv4 ou IPv6 pour le sous-réseau maîtreaux_addresses
: Adresses IPv4 ou IPv6 auxiliaires utilisées par le pilote de réseau, comme mappage de nom d'hôte vers IP
options
: Options spécifiques au pilote comme mappage clé-valeur.
networks:
mynet1:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
ip_range: 172.28.5.0/24
gateway: 172.28.5.254
aux_addresses:
host1: 172.28.1.5
host2: 172.28.1.6
host3: 172.28.1.7
options:
foo: bar
baz: "0"
internal
Par défaut, Compose fournit une connectivité externe aux réseaux. internal
, quand défini à true
, vous permet de créer un réseau isolé de l'extérieur.
labels
Ajouter des métadonnées aux conteneurs en utilisant labels
. Vous pouvez utiliser soit un tableau soit un dictionnaire.
Il est recommandé d'utiliser la notation DNS inversée pour empêcher les étiquettes d'entrer en conflit avec celles utilisées par d'autres logiciels.
networks:
mynet1:
labels:
com.example.description: "Réseau de transaction financière"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
networks:
mynet1:
labels:
- "com.example.description=Réseau de transaction financière"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
name
name
définit un nom personnalisé pour ce réseau. Le champ name peut être utilisé pour référencer des réseaux qui contiennent des caractères spéciaux. Le nom est utilisé tel quel et ne sera pas délimité avec le nom du projet.
networks:
network1:
name: my-app-net
Il peut aussi être utilisé en conjonction avec la propriété external
:
networks:
network1:
external: true
name: "${NETWORK_ID}"
Additional resources
For more examples, see Networking in Compose.