gpt4 book ai didi

docker - docker compose 服务中的端口符号如何工作?

转载 作者:行者123 更新时间:2023-12-02 18:21:08 24 4
gpt4 key购买 nike

在 docker-compose.yml 中,

以下端口符号有什么区别?

ports:
- "5000:5000"

回复:
ports:
- "8080"

或者根本没有端口。

例如在下面的 docker-compose.yml 中,mongodb 服务必须暴露一个端 Eloquent 能与节点服务通信,但没有指定端口
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

来源: https://github.com/DanWahlin/NodeExpressMongoDBDockerApp

然而,在这些 docker-compose.yml 中,有一些使用 27017:27017 指定的端口。或 8080符号。
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

来源: https://github.com/DanWahlin/CodeWithDanDockerServices

你能解释一下区别吗?

最佳答案

典型的 Docker 容器运行一个长时间运行的服务器,监听某个 TCP 端口。同一 Docker 网络上的其他容器可以使用容器的名称(docker run --namecontainer_name: 指令)作为 DNS 名称和服务器运行的端口来访问该容器。在 Docker Compose 中,Compose 为每个 Compose YAML 文件创建一个 Docker 网络,并在 YAML 文件中的 key 下提供服务。即使没有 ports: 也有效被指定。

因此,例如,如果您的 docker-compose.yml文件说

services:
mongo:
image: mongo
others:
env:
MONGODB_HOST: mongo
MONGODB_PORT: 27017

那么 MongoDB 容器将可以在该主机名和(默认)端口上访问,即使它没有明确具有 ports: .

如果您确实声明了 ports:那么容器将可以从 Docker 空间外部访问。如果你只有一个端口,那就是服务器的端口号,Docker 选择主机端口;这在大多数情况下没有用(但可以保证不会遇到端口冲突)。如果您有两个端口,它们是主机端口和内部服务端口。您还可以将主机 IP 地址指定为 绑定(bind) (2) 到。
ports: 的存在与否不影响捐赠者之间的交流。始终使用容器的名称(或 Docker-compose.yml 服务名称)和服务器正在监听的“内部”端口号。

关于docker - docker compose 服务中的端口符号如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com