【问题标题】:docker-compose simple networking demodocker-compose 简单的网络演示
【发布时间】:2019-06-18 18:02:26
【问题描述】:

我是 docker 和 docker-compose 的新手,我正在尝试了解 docker 中的网络。我有以下 docker-compose.yml 文件

version: '3'

services:
  app0:
    build:
      context: ./
      dockerfile: Dockerfile0
  app1:
    build:
      context: ./
      dockerfile: Dockerfile1

Dockerfiles 看起来像

FROM: python:latest

我正在使用 python 图像,因为这就是我想要的实际用例。

我跑

docker-compose build
docker-compose up

输出:

Building app0
Step 1/1 : FROM python:latest
 ---> 3624d01978a1
Successfully built 3624d01978a1
Successfully tagged docker_test_app0:latest
Building app1
Step 1/1 : FROM python:latest
 ---> 3624d01978a1
Successfully built 3624d01978a1
Successfully tagged docker_test_app1:latest

Starting docker_test_app0_1 ... done
Starting docker_test_app1_1 ... done
Attaching to docker_test_app0_1, docker_test_app1_1
docker_test_app0_1 exited with code 0
docker_test_app1_1 exited with code 0

根据我的阅读,docker-compose 将创建一个默认网络,两个容器都将连接到该网络并且应该能够通信。我想提出一个非常简单的演示,例如像这样使用 ping:

docker-compose run app0 ping app1

输出:

ping: app1: Name or service not known

我是否误解了 docker-compose 网络的工作原理?我是否应该能够从 app0 ping app1,反之亦然?

在亚马逊 Linux 上运行。 docker-compose 版本 1.23.2,build 1110ad01

【问题讨论】:

  • 这些 Python 容器是否保持运行/启动某种守护程序以保持容器运行?否则,如果它在启动后立即终止,则无需 ping。
  • @TobiasK。是的,这就是问题所在。我在 app1 中创建了一个命令,该命令运行一个无限循环的脚本,然后我能够从 app0 ping app1!谢谢!
  • 太棒了。也将其添加为答案:)

标签: docker docker-compose


【解决方案1】:

你需要添加一些东西(一个脚本,通过CMD)到那些保持它们运行的​​Python容器,监听端口或者一个简单的循环。

现在它们在启动后立即终止,并且没有任何要 ping 的东西。 (命令完成后整个容器关闭)

【讨论】:

    【解决方案2】:

    在 docker-composer.yaml 文件中定义服务可能还不够,好像一个服务将关闭,另一个服务将没有关于其 IP 地址的信息。

    但是,您可以在它们之间创建依赖关系,例如允许实例在您启动 app0 时自动启动 app1 服务。

    设置如下配置:

    version: '3'
    
    services:
      app0:
        build:
          context: ./
          dockerfile: Dockerfile0
        depends_on:
          - "app1"
      app1:
        build:
          context: ./
          dockerfile: Dockerfile1
    

    如果您希望服务之间进行通信,这是一个很好的做法。

    【讨论】:

    • 我这样做了,仍然得到相同的结果。你真的可以运行它吗?
    • depends_on: 唯一有用的效果是docker-compose up app0 也会启动app1。您并不特别需要它来进行容器间通信。
    • @DavidMaze 感谢您的意见,我已经更新了我的答案。在类似的情况下它仍然可能有帮助
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多