【问题标题】:How to have 2 containers connect to other container using TCP in docker network如何让 2 个容器在 docker 网络中使用 TCP 连接到其他容器
【发布时间】:2020-03-24 15:30:44
【问题描述】:

我现在有这个:

docker network rm cprev || echo;
docker network create cprev || echo;

docker run --rm -d -p '3046:3046' \
    --net=cprev --name 'cprev-server' cprev-server

docker run --rm -d -p '3046:3046' \
    -e cprev_user_uuid=111 --net=cprev --name 'cprev-agent-1' cprev-agent

docker run --rm -d -p '3046:3046' \
    -e cprev_user_uuid=222 --net=cprev --name 'cprev-agent-2' cprev-agent

基本上 2 个 cprev-agent 应该使用 TCP 连接到 cprev-server。问题是我收到了这个错误:

docker:来自守护进程的错误响应:驱动程序外部编程失败 端点 cprev-agent-1 上的连接 (6e65bccf74852f1208b32f627dd0c05b3b6f9e5e7f5611adfb04504ca85a2c11): 绑定 0.0.0.0:3046 失败:端口已分配。

我确信这是一个简单的修复,但坦率地说,我不知道如何在不使用相同端口等的情况下允许来自两个代理容器的双向流量。

【问题讨论】:

  • 您告诉所有三个容器在主机端口 3046 上进行侦听,这会导致该错误。容器间通信不需要-p 选项;在其中至少 2 个容器上删除此选项有帮助吗?
  • 我添加的答案有效 - 但它使用主机网络 - 我想知道如何使用不干扰主机网络的自定义网络?

标签: docker networking network-programming docker-networking docker-network


【解决方案1】:

所以这行得通(使用 --network=host),但我想知道如何创建一个不干扰主机网络的自定义网络??

docker network create cprev;  # unused now

docker run --rm -d -e cprev_host='0.0.0.0' \
    --network=host --name 'cprev-server' "cprev-server:$curr_uuid"


docker run --rm -d -e cprev_host='0.0.0.0' \
    -e cprev_user_uuid=111 --network=host --name 'cprev-agent-1' "cprev-agent:$curr_uuid"

docker run --rm -d -e cprev_host='0.0.0.0' \
    -e cprev_user_uuid=222 --network=host --name 'cprev-agent-2' "cprev-agent:$curr_uuid"

那么无论如何使用我的自定义 docker 网络“cprev”来让它工作?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多