如何使用端口号删除 docker 容器

Posted

技术标签:

【中文标题】如何使用端口号删除 docker 容器【英文标题】:How to remove docker container using port number 【发布时间】:2017-11-20 13:05:24 【问题描述】: 我有在 Docker 容器中运行的节点服务 我正在使用 shell 脚本来运行这些服务 我想在 3 个不同的端口上运行同一服务的三个不同实例。说9011 9022 9033 我还希望它以这样的方式配置它,即在每次新部署后它应该停止以前的服务并将其删除 我正在使用docker rm test-service 删除它,但它也会删除其他实例。 通过这种方法,实例只能运行一次。

有什么办法可以删除特定端口上运行的 Docker 服务

这是我的 shell 脚本

#!/bin/bash
ORGANISATION="$1"
SERVICE_NAME="$2"
VERSION="$3"
ENVIRONMENT="$4"
INTERNAL_PORT_NUMBER="$5"
EXTERNAL_PORT_NUMBER="$6"
NETWORK="$7"
docker build -t $ORGANISATION/$SERVICE_NAME:$VERSION --build-arg PORT=$INTERNAL_PORT_NUMBER --build-arg ENVIRONMENT=$ENVIRONMENT --no-cache .
docker stop $SERVICE_NAME
docker rm $SERVICE_NAME

sudo npm install
sudo npm install -g express
docker run -p $EXTERNAL_PORT_NUMBER:$INTERNAL_PORT_NUMBER --network $NETWORK --name $SERVICE_NAME --restart always -itd $ORGANISATION/$SERVICE_NAME:$VERSION

【问题讨论】:

您能详细解释一下您的用例吗?这听起来很混乱/不必要的自动取款机。脚本也在运行容器,而不是服务?你能粘贴你的确切命令吗? docker stop $SERVICE_NAME docker rm $SERVICE_NAME 这些是命令。但它也会删除服务的另一个实例,因为我想知道是否有其他方法可以根据端口删除容器 但是你没有运行服务。服务是 Docker 中非常具体的东西。您正在运行的是容器,并且您不能运行超过 1 个具有相同名称的容器,因此您实际上不能按照您所说的去做。请粘贴您正在运行的整组命令,并在每个命令之后输出docker ps 我只运行 shell。从 shell 文件中它将运行容器。请参阅我在上面发布的 shell 文件中的命令。 正如你所说,我不能运行多个同名容器。我可以在 3 个不同的端口上运行同名的 docker 服务吗?如果是,我需要在上面的 shell 文件中进行哪些修改 【参考方案1】:

我不能运行多个同名容器。我可以在 3 个不同的端口上运行同名的 docker 服务吗?如果是,我需要在上面的 shell 文件中进行哪些修改?

这将是三个docker run,每个使用相同的内部端口,但映射到不同的主机端口,具有三个不同的名称

docker run -p $EXTERNAL_PORT_NUMBER1:$INTERNAL_PORT_NUMBER --name $SERVICE_NAME1
docker run -p $EXTERNAL_PORT_NUMBER2:$INTERNAL_PORT_NUMBER --name $SERVICE_NAME2 
docker run -p $EXTERNAL_PORT_NUMBER3:$INTERNAL_PORT_NUMBER  --name $SERVICE_NAME3

我想为服务执行 LoadBalance

见docker swarm mode

swarm 管理器使用 入口负载平衡 将您希望在 swarm 外部提供的服务公开。 swarm manager 可以自动为服务分配PublishedPort,或者您可以为服务配置PublishedPort。您可以指定任何未使用的端口。如果不指定端口,swarm manager 会为服务分配一个30000-32767 范围内的端口。

例子:

以下命令将 nginx 容器中的 80 端口发布到 swarm 中任何节点的 8080 端口

$ docker service create \
  --name my-web \
  --publish 8080:80 \
  --replicas 2 \
  nginx

【讨论】:

感谢您的回复,但无法运行同名容器 @AnandDeshmukh 没有:***.com/a/31698016/6309。每个容器都有自己的 id 和自己的名称。 是的,每个 docker 容器都有自己的 ID,但名称应该不同 当我尝试实现时,我收到一条错误消息,提示容器已经存在同名。我不想更改名称因为我正在使用名称调用此服务

以上是关于如何使用端口号删除 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器内部端口号映射到外部宿主机(Ubuntu)端口号

Flask默认端口号[重复]

如何在集群中获得处理本次请求的web容器的端口号?

docker 容器修改端口

docker端口映射设置

如何在 Docker 上发布 UDP 端口?