如何从dockerfile中访问在另一个Docker容器中运行的Web服务?

时间:2018-09-16 23:15:46

标签: docker

我在docker容器中运行了一个Web服务,可以在localhost:5000(主机)上访问它。我想在Dockerfile中调用此服务。我正在为.net核心应用程序使用多阶段Dockerfile。我想收集构建统计信息并发送到在localhost:5000运行的服务。到目前为止,建议的方法是使用--network =“ host”。但这在构建期间不起作用。

1 个答案:

答案 0 :(得分:1)

多么奇怪! --network=host应该达到您所建议的方法所期望的效果。我想知道为什么开箱即用对您不起作用。

我建议您测试此简化版本的问题,以消除Docker网络堆栈之外的潜在错误源:

  1. 运行虚拟Web服务:docker run -d -p 5000:80 nginx可以解决问题
  2. 创建此Dockerfile:

FROM busybox
RUN echo localhost:5000
RUN wget localhost:5000
  1. 运行docker build --no-cache .。如预期的那样,网络调用将失败,并且输出应包括:
      

    wget:无法连接到远程主机(127.0.0.1):连接被拒绝

  2. 运行docker build --network=host --no-cache .。对我来说,输出包括:
      

    连接到localhost:5000(127.0.0.1:5000)

         

    index.html 100%| ************************************ | 612 0:00:00 ETA

  3. 运行docker build --network=bridge --no-cache .。同样,网络呼叫失败并显示:
      

    wget:无法连接到远程主机(127.0.0.1):连接被拒绝

尝试此操作会得到什么?

以上示例中的重要说明:我在--no-cache命令中包含了docker build参数,以确保重建整个Dockerfile。否则,docker只会从缓存中提取已构建的图像层,并忽略自您上次构建此Dockerfile以来对--network参数所做的任何更改。

更重要的是,尽管network选项是在映像构建时公开的(从最新的API版本开始),但是我不确定这种用法是否与最佳做法一致。 使用在实际Dockerfile之外传输构建统计信息的解决方案可能会更好。例如,运行docker build ...的CI脚本可以收集该命令grep的输出/ sed获取特定统计信息,并将其传输到您的Web服务。


编辑:如何根据您的评论使用docker-compose 实现此目的。可悲的是,docker-compose文档并未对此做广告,但实际上支持--networkIt was added in Compose YAML file format version 3.4,特别是in this PR

下面是一个示例docker-compose.yml

version: '3.4'
services:
  web:
    build:
      context: .
      network: host

将其与示例Dockerfile放在同一目录中,并确保nginx在单独的容器中,如上所述。

结果如下:

> docker-compose build --no-cache
Building web
Step 1/3 : FROM busybox
 ---> e1ddd7948a1c
Step 2/3 : RUN echo localhost:5000
 ---> Running in d5f0d712c188
localhost:5000
Removing intermediate container d5f0d712c188
 ---> 8aa9d974447f
Step 3/3 : RUN wget localhost:5000
 ---> Running in a10cee732e48
Connecting to localhost:5000 (127.0.0.1:5000)
index.html           100% |********************************|   612  0:00:00 ETA

Removing intermediate container a10cee732e48
 ---> 8a287d116b4b

Successfully built 8a287d116b4b
Successfully tagged dockerquestion_web:latest