【问题标题】:Access local host ports from docker container从 docker 容器访问本地主机端口
【发布时间】:2018-06-02 03:25:26
【问题描述】:

我正在使用 Landoop 快速数据开发并暴露容器的端口 -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 9092:9092。

docker run --rm -it -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 
 -p 9092:9092 -e ADV_HOST=127.0.0.1 --name=containerA landoop/fast-data-dev

当我通过 localhost 在主机上使用时可以访问这些。 但是当我使用

运行另一个容器时

docker run -it --rm --net=host --name containerB mytest/containerB

1) 如何从容器B 访问容器A 的上述暴露端口? 我确实意识到对于 MAC,我们必须使用 docker.for.mac.localhost 而不是 localhost。我如何确认这些端口可以从 docker.for.mac.localhost 即 containerB 访问?任何帮助表示赞赏。谢谢。

【问题讨论】:

标签: docker


【解决方案1】:

https://github.com/Landoop/kafka-connectors-tests,您可以看到多个 docker 是如何组合在一起的,即fast-data-dev + elastic-search,以便通过在 Kafka 上生成数据来运行集成测试,然后运行 ​​https://github.com/Landoop/stream-reactor Kafka 连接器将数据写入弹性 -搜索等等。

集成测试的结果发布在:

http://coyote.landoop.com/connect/

【讨论】:

  • 谢谢,但我找不到 jdbc 的,我正在开发 jdbc 连接器 docker 容器
【解决方案2】:

为了让容器能够通信,它们需要共享一个虚拟网络。

docker network create my-net

docker run --rm -it --network my-net -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 -p 9092:9092\
 -e ADV_HOST=127.0.0.1 --name=containerA landoop/fast-data-dev

docker run -it --rm  --network my-net --name containerB mytest/containerB

现在容器B 可以使用http://containerA:<port> 与容器A 通信

【讨论】:

  • 我试过了,但它不适合我。我也可以再试一次,但我如何验证容器 B 上的那些暴露端口可用?
  • 对于容器之间的通信,您不需要将主机端口映射到容器端口。
【解决方案3】:

为了让两个不同的容器一起工作,我会使用 docker-compose 在它们之间创建一个虚拟网络

这里的官方文档:https://docs.docker.com/compose/networking/#links

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多