如何让 2 个容器在 docker 网络中使用 TCP 连接到其他容器

How to have 2 containers connect to other container using TCP in docker network

我现在有这个:

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 代​​理应该使用 TCP 连接到 cprev 服务器。问题是我收到此错误:

docker: Error response from daemon: driver failed programming external connectivity on endpoint cprev-agent-1 (6e65bccf74852f1208b32f627dd0c05b3b6f9e5e7f5611adfb04504ca85a2c11): Bind for 0.0.0.0:3046 failed: port is already allocated.

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

所以这可行(使用 --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" 使它正常工作?