我是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
答案 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
如果您希望服务之间相互通信,这是一个好习惯。