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

时间:2017-06-18 03:32:28

标签: shell docker docker-compose docker-swarm

  • 我有在Docker容器中运行的Node服务
    • 我正在使用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}

1 个答案:

答案 0 :(得分:0)

  

我无法运行多个具有相同名称的容器。我可以在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

  

群组管理器使用入口负载平衡来公开您希望在群组外部提供的服务。
  群组管理器可以自动为服务分配PublishedPort,也可以为服务配置PublishedPort。您可以指定任何未使用的端口。如果您未指定端口,则群组管理器会为服务分配30000-32767范围内的端口。

示例:

  

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

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