docker-compose简单网络演示

时间:2019-01-24 22:19:22

标签: docker docker-compose

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

version: '3'

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

Dockerfile看起来像

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 ping app1,反之亦然吗?

在Amazon Linux上运行。 docker-compose版本1.23.2,内部版本1110ad01

2 个答案:

答案 0 :(得分:2)

您需要向使它们保持运行的Python容器中添加一些内容(脚本,通过CMD),某些内容需要在端口上侦听,或者需要简单的循环。

现在,它们在启动后立即终止,没有任何可Ping的操作。 (整个容器在命令执行完毕后会关闭)

答案 1 :(得分:-1)

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

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

设置以下配置:

version: '3'

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

如果您希望服务之间相互通信,这是一个好习惯。