【问题标题】:How to remove docker container using port number如何使用端口号删除 docker 容器
【发布时间】: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 文件中进行哪些修改

标签: shell docker docker-compose docker-swarm


【解决方案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 没有:stackoverflow.com/a/31698016/6309。每个容器都有自己的 id 和自己的名称。
  • 是的,每个 docker 容器都有自己的 ID,但名称应该不同 当我尝试实现时,我收到一条错误消息,提示容器已经存在同名。我不想更改名称因为我正在使用名称调用此服务
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2023-03-12
  • 2019-08-28
  • 2021-02-25
相关资源
最近更新 更多