docker service create --name 服务名称 --publish published=服务端口,target=容器端口,protocol=端口协议,mode=模式 镜像名称:镜像TAG
参数说明:
--name
: 服务名称--publish
: 需要暴露的端口
published
为服务端口target
为容器端口protocol
为端口协议(可选 tcp
、udp
,不配置时默认为 tcp
)mode
为端口模式(可选 ingress
、host
,不配置时默认为 ingress
)
ingress
: 使用 Swarm 集群路由进行代理
host
:主机模式(不使用路由)
示例:将 nginx 容器的 80 端口暴露至主机的 10080 端口,使得在访问 Swarm 集群任意主机的 10080 端口,均可访问到此 Nginx 服务
docker service create --name my-web --publish published=10080,target=80 --replicas 3 nginx:1.24.0-alpine
docker service update --publish-add published=服务端口,target=容器端口,protocol=端口协议,mode=模式 服务名称
参数说明:
--publish-add
: 新增需要暴露的端口。具体内容见上方方式一中的说明示例:
docker service update --publish-add published=16379,target=6379 redis
此时访问 Swarm 集群任意主机的 16379 端口,即可访问到此 Redis 服务
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" 服务名称
示例:
docker service inspect --format="{{json .Endpoint.Spec.Ports}}" redis
docker service update --publish-rm published=服务端口,target=容器端口,protocol=端口协议,mode=模式 服务名称
参数说明:
--publish-rm
: 删除现有暴露的端口。具体内容见上方说明示例:
docker service update --publish-rm published=16379,target=6379 redis