docker compose服务中的端口符号是如何工作的?
在docker-compose.yml中 以下端口符号的区别是什么docker compose服务中的端口符号是如何工作的?,docker,docker-compose,docker-networking,Docker,Docker Compose,Docker Networking,在docker-compose.yml中 以下端口符号的区别是什么 ports: - "5000:5000" 响应: 或者根本没有端口 例如,在下面的docker-compose.yml中,mongodb服务必须公开一个端口以与节点服务通信,但未指定任何端口 services: node: build: context: . dockerfile: node.dockerfile ports: - "3000:3000"
ports:
- "5000:5000"
响应:
或者根本没有端口
例如,在下面的docker-compose.yml中,mongodb服务必须公开一个端口以与节点服务通信,但未指定任何端口
services:
node:
build:
context: .
dockerfile: node.dockerfile
ports:
- "3000:3000"
networks:
- nodeapp-network
depends_on:
- mongodb
mongodb:
image: mongo
networks:
- nodeapp-network
networks:
nodeapp-network:
driver: bridge
资料来源:
但是,在这些docker-compose.yml中,存在使用27017:27017
或8080
符号指定的端口AWLAY
services:
nginx:
container_name: nginx
image: ${DOCKER_ACCT}/nginx
build:
context: .
dockerfile: .docker/nginx.${APP_ENV}.dockerfile
links:
- node1:node1
- node2:node2
- node3:node3
ports:
- "80:80"
- "443:443"
networks:
- codewithdan-network
node1:
container_name: node-codewithdan-1
image: ${DOCKER_ACCT}/node-codewithdan
build:
context: .
dockerfile: .docker/node-codewithdan.${APP_ENV}.dockerfile
ports:
- "8080"
volumes:
- .:/var/www/codewithdan
working_dir: /var/www/codewithdan
env_file:
- ./.docker/env/app.${APP_ENV}.env
depends_on:
- mongo
- redis
networks:
- codewithdan-network
node2:
container_name: node-codewithdan-2
image: ${DOCKER_ACCT}/node-codewithdan
build:
context: .
dockerfile: .docker/node-codewithdan.${APP_ENV}.dockerfile
ports:
- "8080"
volumes:
- .:/var/www/codewithdan
working_dir: /var/www/codewithdan
env_file:
- ./.docker/env/app.${APP_ENV}.env
depends_on:
- mongo
- redis
networks:
- codewithdan-network
node3:
container_name: node-codewithdan-3
image: ${DOCKER_ACCT}/node-codewithdan
build:
context: .
dockerfile: .docker/node-codewithdan.${APP_ENV}.dockerfile
ports:
- "8080"
volumes:
- .:/var/www/codewithdan
working_dir: /var/www/codewithdan
env_file:
- ./.docker/env/app.${APP_ENV}.env
depends_on:
- mongo
- redis
networks:
- codewithdan-network
mongo:
container_name: mongo
image: ${DOCKER_ACCT}/mongo
build:
context: .
dockerfile: .docker/mongo.dockerfile
ports:
- "27017:27017"
env_file:
- ./.docker/env/mongo.${APP_ENV}.env
networks:
- codewithdan-network
redis:
container_name: redis
image: ${DOCKER_ACCT}/redis
build:
context: .
dockerfile: .docker/redis.${APP_ENV}.dockerfile
ports:
- "6379"
networks:
- codewithdan-network
networks:
codewithdan-network:
driver: bridge
资料来源:
您能解释一下区别吗?要么指定两个端口(主机:容器),要么只指定容器端口(选择临时主机端口)。所以在你的例子中,8080
是集装箱港口
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
从
临时端口范围由/proc/sys/net/ipv4/ip_local_port_range内核参数配置,通常范围为32768到61000
无论哪种方式,您都应该能够通过检查NAT表来窥探Docker在网络堆栈中的成就
在docker compose中,默认情况下,如果端口与已打开的端口发生冲突,则不会创建任何端口典型的docker容器运行长时间运行的服务器,侦听某些TCP端口。同一Docker网络上的其他容器可以使用容器名称(
Docker run--name
,container\u name:
指令)作为DNS名称和服务器运行的端口访问该容器。在Docker Compose中,Compose为每个Compose YAML文件创建Docker网络,并在YAML文件中的密钥下提供服务。即使未指定端口:
,此操作也有效
例如,如果您的docker compose.yml
文件
services:
mongo:
image: mongo
others:
env:
MONGODB_HOST: mongo
MONGODB_PORT: 27017
然后,可以在该主机名和(默认)端口上访问MongoDB容器,即使它没有明确的端口:
如果您确实声明了一个端口:
,那么可以从外部Docker空间访问容器。如果您只有一个端口,它是服务器的端口号,Docker选择主机端口;这在大多数情况下并不有用(但保证不会发生端口冲突)。如果您有两个端口,它们是主机端口和内部服务端口。您还可以指定要绑定到的主机IP地址
是否存在
端口:
不影响内部通信。始终使用容器的名称(或Docker compose.yml
服务名称)和服务器正在侦听的“内部”端口号。关于“compose为每个compose YAML文件创建一个Docker网络”:好的,但是我的示例中的网络声明会产生什么影响?它会创建第二个网络并使用它。我认为它曾经是必需的(比如之前的链接:
),并且已经被载入教程。
services:
mongo:
image: mongo
others:
env:
MONGODB_HOST: mongo
MONGODB_PORT: 27017