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

  • 我有在Docker容器中运行的Node服务
    • 我正在使用shell脚本来运行这些服务
    • 我想在3个不同的端口上运行同一个服务的三个不同的实例。 说9011 9022 9033
    • 我也希望它以这样一种方式进行configuration,即在每次新部署之后,应该停止以前的服务并将其删除
    • 我正在使用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} 

我不能运行多个具有相同名称的容器。 我可以在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群模式

swarmpipe理器使用入口负载均衡来暴露你想在群集外部提供的服务。
swarmpipe理器可以自动将服务分配给一个PublishedPort或者您可以为该服务configuration一个PublishedPort 。 您可以指定任何未使用的端口。 如果您不指定端口,那么swarmpipe理器将为该服务分配一个30000-32767范围内的端口。

例:

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

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