docker编写简单的网络演示

docker编写简单的网络演示,docker,docker-compose,Docker,Docker Compose,我是docker和docker compose的新手,我试图了解docker中的网络。我有以下docker-compose.yml文件 version: '3' services: app0: build: context: ./ dockerfile: Dockerfile0 app1: build: context: ./ dockerfile: Dockerfile1 Dockerfiles看起来像 FROM: p

我是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映像,因为这是我实际用例所需要的

我跑

输出:

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
ping: app1: Name or service not known
据我所知,docker compose将创建一个默认网络,两个容器都将连接到该网络,并且应该能够通信。我想给出一个非常简单的演示,例如使用ping,如下所示:

docker-compose run app0 ping app1
输出:

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
ping: app1: Name or service not known
我是否误解了docker compose网络的工作原理?我是否应该能够从app0 ping app1,反之亦然

在AmazonLinux上运行。
docker compose version 1.23.2,build 1110ad01

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

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

设置以下配置:

version: '3'

services:
  app0:
    build:
      context: ./
      dockerfile: Dockerfile0
    depends_on:
      - "app1"
  app1:
    build:
      context: ./
      dockerfile: Dockerfile1
如果您希望服务之间相互通信,这是一种很好的做法

您需要在那些Python容器中添加一些东西(一个脚本,通过
CMD
)来保持它们的运行,一些在端口或简单循环上侦听的东西


现在,它们在启动后立即终止,并且没有什么需要ping的。(整个容器在其命令完成时关闭)

我这样做了,但仍然得到相同的结果。你真的能运行这个吗?
唯一有用的效果取决于:
docker compose up app0
也会启动
app1
。您并不特别需要它来进行集装箱间的通信。@DavidMaze谢谢您的输入,我已经更新了我的答案。在类似的情况下,这些Python容器是否能够保持/启动某种守护进程来保持容器的运行呢?否则,如果它在启动后立即终止,则无需ping。@TobiasK。是的,这就是问题所在。我在app1中创建了一个命令,它运行一个带有无限循环的脚本,然后我就可以从app0 ping app1了!谢谢伟大的也将其添加为答案:)