【问题标题】:How to run two instances of a Service without binding to specific port如何在不绑定到特定端口的情况下运行服务的两个实例
【发布时间】:2018-02-12 16:51:44
【问题描述】:

我有两个关于运行 docker 容器的问题语句。

  1. 运行两个 docker 容器实例。

我正在运行一个容器,例如 test-service。当我执行命令 只有一个 名为 test-service 的容器被创建。我想更改命令并再创建一个容器实例。

  1. 动态端口号分配给容器。

我正在绑定端口说 8080:8080。我想配置它,使端口号是动态的。

我用来运行容器的命令如下:

docker run -p ${EXTERNAL_PORT_NUMBER}:${INTERNAL_PORT_NUMBER} --network ${NETWORK} --name ${SERVICE_NAME} --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}

测试服务是一个节点服务。

请让我知道上述命令中需要进行哪些修改。

【问题讨论】:

  • 您应该使用docker stack 而不是docker-compose。会让你的事情变得更容易

标签: docker docker-compose dockerfile


【解决方案1】:

第二个问题:

使用--publish-all 标志而不是提供端口映射。

$ docker run --publish-all --network ${NETWORK} --name ${SERVICE_NAME} --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}

这会将容器的端口发布到主机端口。主机端口将是动态的。并且所有的容器端口都会暴露出来。

但如果你想暴露特定端口,请使用-p :<port>

$ docker run -p :${INTERNAL_PORT_NUMBER} --network ${NETWORK} --name ${SERVICE_NAME} --restart always -m 1024M --memory-swap -1 -itd ${ORGANISATION}/${SERVICE_NAME}:${VERSION}

${EXTERNAL_PORT_NUMBER}部分留空,则将动态选择端口。

对于第一个问题:

您可以使用 docker-compose。检查这个answer

或者,您可以多次运行docker run。在这种情况下,使用不同的--name

【讨论】:

    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多