如何在版本 2 docker-compose 定义文件中定义网络?
How do you define a network in a version 2 docker-compose definition file?
documentation about networking is currently 对此非常含糊 ― 你如何实现 docker-compose.yml
创建 虚拟网络,让服务(容器)由它在那个网络上通信?
此场景中的目标是不依赖于预定义的网络,用于为 docker-compose 定义的容器集合。而是将网络定义包含在 docker-compose 定义文件中。
对于预定义的网络,如果 A
中的应用程序使用名称 B
作为主机名来访问打包在 B
中的应用程序,则以下内容将起作用端口 9000。它将用于它的 host:port
将是 B:9000
(在我的特定情况下更具体地说是 uri mongodb://B:9000
)。
foo:
net: my-pre-defined-network
container_name: A
image: foo
bar:
net: my-pre-defined-network
container_name: B
image: bar
ports:
- "9000:9000"
但我的观点是在 docker-compose 配置中定义一个网络,而不是假设一个网络是先验定义的...
TL;DR
自动创建默认网络。请参阅 https://docs.docker.com/compose/networking/ 的开头部分,了解如何在此网络中寻址容器。
只要您使用版本 2 格式,Compose 就会为您创建一个 default
网络,但如果您想要自定义网络,请参阅此处的文档:
- https://docs.docker.com/compose/compose-file/#network-configuration-reference
- https://docs.docker.com/compose/networking/#specifying-custom-networks
您可以在 Compose 文件的顶层创建一个 networks
部分,并在每个服务的 networks
部分中引用它们。但是您不需要,只需使用下面评论中描述的默认网络即可。
请查看以下示例,其中包括网络定义、流量实现等。
version: '2.2'
services:
unifiedpushserver:
image: docker.io/aerogear/unifiedpush-wildfly:2.1.0
networks:
- network
volumes:
- ./helper:/ups-helper:z
entrypoint: "/ups-helper/exportKeycloakHost.sh"
depends_on:
unifiedpushDB:
condition: service_healthy
environment: <br>
POSTGRES_SERVICE_HOST: ${POSTGRES_SERVICE_HOST}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_SERVICE_PORT: ${POSTGRES_SERVICE_PORT}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
KEYCLOAK_SERVICE_HOST: ${KEYCLOAK_SERVICE_HOST}
KEYCLOAK_SERVICE_PORT: ${KEYCLOAK_SERVICE_PORT}
labels:
traefik.backend: "aerogear"
traefik.docker.network: "appliance"
traefik.domain: "notification.com"
traefik.enable: "true"
traefik.frontend.entryPoints: "http, https"
traefik.frontend.redirect: "false"
traefik.frontend.rule: "Host: notification.com"
links:
- unifiedpushDB:unifiedpush
- keycloakServer:keycloak
ports:
- 9999:8080
unifiedpushDB:
image: postgres:9.6
networks:
- network
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DATABASE}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
timeout: 20s
retries: 10
keycloakServer:
networks:
- network
image: docker.io/jboss/keycloak:4.1.0.Final
command: "-b 0.0.0.0 -Dkeycloak.import=/ups-keycloak-config/ups-realm-sample.json"
volumes:
- ./keycloak-realm:/ups-keycloak-config:z
environment:
KEYCLOAK_USER: ${KEYCLOAK_USER}
KEYCLOAK_PASSWORD: ${KEYCLOAK_PASSWORD}
networks:
network:
external:
name: appliance
documentation about networking is currently 对此非常含糊 ― 你如何实现 docker-compose.yml
创建 虚拟网络,让服务(容器)由它在那个网络上通信?
此场景中的目标是不依赖于预定义的网络,用于为 docker-compose 定义的容器集合。而是将网络定义包含在 docker-compose 定义文件中。
对于预定义的网络,如果 A
中的应用程序使用名称 B
作为主机名来访问打包在 B
中的应用程序,则以下内容将起作用端口 9000。它将用于它的 host:port
将是 B:9000
(在我的特定情况下更具体地说是 uri mongodb://B:9000
)。
foo:
net: my-pre-defined-network
container_name: A
image: foo
bar:
net: my-pre-defined-network
container_name: B
image: bar
ports:
- "9000:9000"
但我的观点是在 docker-compose 配置中定义一个网络,而不是假设一个网络是先验定义的...
TL;DR
自动创建默认网络。请参阅 https://docs.docker.com/compose/networking/ 的开头部分,了解如何在此网络中寻址容器。
只要您使用版本 2 格式,Compose 就会为您创建一个 default
网络,但如果您想要自定义网络,请参阅此处的文档:
- https://docs.docker.com/compose/compose-file/#network-configuration-reference
- https://docs.docker.com/compose/networking/#specifying-custom-networks
您可以在 Compose 文件的顶层创建一个 networks
部分,并在每个服务的 networks
部分中引用它们。但是您不需要,只需使用下面评论中描述的默认网络即可。
请查看以下示例,其中包括网络定义、流量实现等。
version: '2.2'
services:
unifiedpushserver:
image: docker.io/aerogear/unifiedpush-wildfly:2.1.0
networks:
- network
volumes:
- ./helper:/ups-helper:z
entrypoint: "/ups-helper/exportKeycloakHost.sh"
depends_on:
unifiedpushDB:
condition: service_healthy
environment: <br>
POSTGRES_SERVICE_HOST: ${POSTGRES_SERVICE_HOST}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_SERVICE_PORT: ${POSTGRES_SERVICE_PORT}
POSTGRES_DATABASE: ${POSTGRES_DATABASE}
KEYCLOAK_SERVICE_HOST: ${KEYCLOAK_SERVICE_HOST}
KEYCLOAK_SERVICE_PORT: ${KEYCLOAK_SERVICE_PORT}
labels:
traefik.backend: "aerogear"
traefik.docker.network: "appliance"
traefik.domain: "notification.com"
traefik.enable: "true"
traefik.frontend.entryPoints: "http, https"
traefik.frontend.redirect: "false"
traefik.frontend.rule: "Host: notification.com"
links:
- unifiedpushDB:unifiedpush
- keycloakServer:keycloak
ports:
- 9999:8080
unifiedpushDB:
image: postgres:9.6
networks:
- network
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DATABASE}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
timeout: 20s
retries: 10
keycloakServer:
networks:
- network
image: docker.io/jboss/keycloak:4.1.0.Final
command: "-b 0.0.0.0 -Dkeycloak.import=/ups-keycloak-config/ups-realm-sample.json"
volumes:
- ./keycloak-realm:/ups-keycloak-config:z
environment:
KEYCLOAK_USER: ${KEYCLOAK_USER}
KEYCLOAK_PASSWORD: ${KEYCLOAK_PASSWORD}
networks:
network:
external:
name: appliance