2017-09-10 22 views
0

我在docker中创建了一个web应用程序。我的webapp使用其他码头图像,例如redis,mariadb。这些都在本地运行。现在我创建了一个我的webapp的图像。所以我有三个图像:webapp(这不是up),redis和mariadb都已经启动了。使图像彼此通信Docker

当我试图运行我的web应用程序的图像无法启动..它无法与其他图像(redis和mariadb)连接。

我怎样才能让我的web应用程序的图像通过使用在链路沟通,让你也有能力sharing environmental variables between containers与其他需要的图像

回答

1

你可以做到这一点沟通。

https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/

为了帮助你,我为你提供在图像被连接在一起泊坞窗,撰写文件的例子。在我的示例中,该应用程序与databaseredis进行通信。

version: '2' 
services: 
    app: 
    extends: 
     service: app 
    volumes: 
     - .:/var/www/app 
    links: 
     - db 
     - redis 
    nginx: 
    extends: 
     service: nginx 
    links: 
     - app 
    redis: 
    extends:  
     service: redis 
    db: 
    image: postgres:9 
    volumes: 
     - db_data:/var/lib/postgres 
    restart: always 

另一种方法是使用网络命令: https://docs.docker.com/engine/userguide/networking/work-with-networks/

1

你需要创建一个泊坞窗网所有容器连接在一起。

docker network create net

然后你就可以与网络选项启动容器:

docker run --network net ...

,或者如果容器已在运行,你可以将它们连接到网络

docker network connect net <container-name>

一旦你这样做,容器可以沟通相互使用容器名称作为主机名,例如:redis,mongo ...

+0

它不工作。我有一个默认网络,它连接了redis和mariadb。现在当我做“码头运行 - 网络默认webapp”它给错误“无法连接到数据库”:( – Abhishek

+0

@Abhishek你命名db容器并使用该名称作为主机名?也可以尝试执行到其中一个容器,并尝试使用容器名称ping其他容器 – yamenk

+0

没问题redis和mariadb已经在运行,我尝试从mariadb容器中ping redis,它可以ping通,但是我的webapp无法ping,因为它没有运行。运行“docker run --network default webapp”但它并没有启动 – Abhishek