我正在尝试运行2个docker容器。一个是Landoop的Kafka容器,它将几个端口暴露给本地主机和一个kafka连接容器,它试图访问另一个映像暴露的端口。我能够访问Landoop的Kafka容器暴露的端口,但是在尝试从另一个容器访问端口时遇到问题。
PS:我正在使用MAC,我尝试使用--network="host"
启动我的其他容器。
docker run -it --network="host" --env-file env-file.sh --name NAME IMAGE
但是一旦我启动容器就会被杀死。我正在使用
docker run --rm -it -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 9092:9092 -h 127.0.0.1 -e ADV_HOST=127.0.0.1 landoop/fast-data-dev
启动Landoop码头工具。
答案 0 :(得分:1)
从documentation您可以找到以下信息:
连接到默认网桥的容器可以通过IP地址相互通信。 Docker不支持默认网桥上的自动服务发现。如果希望容器能够按容器名称解析IP地址,则应使用用户定义的网络。您可以使用旧版docker run -link选项将两个容器链接在一起,但在大多数情况下不建议这样做。
当您尝试使用host
网络并指导自己127.0.0.1
几乎时,这是有道理的;通常该地址被分配给回送接口,因此不是使用而不是能够访问您机器上的其他端口 - 而是从不离开Docker容器。
如果您没有使用Docker Compose文件 - 这通常会将所有服务置于默认的覆盖网络中,而是希望通过docker container run
命令手动运行所有内容 - 您的安装应该看起来像这样:
docker network create your_new_network
docker container run -d --network your_new_network --name a_container_1 your_image
docker container run -d --network your_new_network --name another_container
现在 - 从这些容器中,您可以尊重每个人a_container_1
和another_container
。
您的集装箱停靠可能相关也可能不相关;不幸的是,我无法用给出的信息回答这个问题 - 但这应该可以为您提供足够的信息来连接您的容器。干杯!
答案 1 :(得分:0)
我认为此变量是一个问题> ADV_HOST = 127.0.0.1 当您想从主机连接到Kafka(在docker容器中运行)时,此变量可以帮助建立连接 但是,如果定义了该变量,它将使另一个容器看不到Kafka容器。 尝试2件事: 1.如果网络为主机,即--network =“ host”且-e ADV_HOST = [local_ip],则用本地IP地址替换127.0.0.1。 2.删除该ADV_HOST广告主机地址,并使用提到的@ tj-biddle方法