当前位置:  开发笔记 > 编程语言 > 正文

如何在docker中链接容器?

如何解决《如何在docker中链接容器?》经验,为你挑选了3个好方法。

这是我键入时的结果docker ps: 这是我输入docker ps时的图像

在docker中,我有3个容器,webapps,redis和rabbitmq,我很困惑如何将容器webapps链接到容器redis和rabbitmq容器?在非docker应用程序中,mywebapps可以向rabbitmq发送消息并写入/读取reddis.我stil不知道如何链接3那些容器,我尝试使用这样的命令

docker run --name rabbitmq -p 8080:80 --link webapps:nimmis/apache-php7 -d rabbitmq

但它仍然无效

这是我在webapps上的config.php,当我尝试通过rabbitmq发送消息时

define('HOST', 'localhost');
define('PORT', 5672);

我试图用hostname更改localhost

define('HOST', 'rabbitmq');
define('PORT', 5672);

错误消息是连接拒绝...似乎在我的三个容器需要配置/映射/绑定网络在同一个IP?



1> Farhad Farah..:

链接是一项传统功能.请使用"用户定义的网络":

sudo docker network create mynetwork

然后使用此网络重新运行您的容器:

sudo docker run --name rabbitmq -p 8080:80 -d --network mynetwork rabbitmq

对于您希望彼此连接的其他容器,请执行相同的操作.

使用"用户定义的网络",您可以使用"内部名称解析"(有点像访问网站时的域名解析).您可以使用要引用的容器的名称,以便解析容器的IP地址,只要它们在相同的"用户定义的网络"上运行即可.这样,您可以rabbitmq在同一网络上的其他容器中解析容器的IP地址及其名称.

同一"用户定义网络"上的所有容器都将具有网络连接.不需要"遗留链接".


“只要容器在相同的“用户定义网络”上运行,就可以使用要引用的容器的名称来解析容器的IP地址。” -非常有帮助,谢谢。

2> Pitt..:

对于容器间依赖关系和链接,您将需要使用docker-compose可以在容器之间定义链接的位置.

在存储Docker文件的根目录中,只需创建一个名为的新文件docker-compose.yml,在这里您可以将容器定义为相互依赖的服务,如下所示:

version: '2'
services:
  webapps:
    build: .
    links:
      - "rabbitmq:rabmq"
      - "redis"

  rabbitmq:
    image: rabbitmq

  redis:
    image: redis

所以在这里的webapps服务定义中,你会看到links其他两个服务rabbitmqredis.这意味着当webapps构建容器时,会对其hosts文件进行输入,以便将域名redis转换为实际容器的IP和端口号.

您可以选择使用service:alias表示法更改此容器的地址名称,就像我定义rabbitmq使用rabmq容器内的别名一样webapps.

现在使用docker-compose类型来构建和启动容器:

docker-compose up -d

因此,连接到另一个容器就像使用此别名作为主机名一样简单.

由于您docker-compose在这种情况下使用它,它会自动创建一个docker网络来连接所有容器,因此您不必担心这一点.但是有关更多信息,请查看文档:https: //docs.docker.com/compose/networking/#/specifying-custom-networks



3> 小智..:

您需要将rabbitmq和redis链接到您的webapps容器,而不是相反的方法。

    #运行redis容器
    docker运行--name some-redis -d redis

    #run rabbitmq容器
    docker run -d --hostname my-rabbit --name some-rabbit rabbitmq

    #run webapps容器
    docker run --name webapps -p 8080:80 --link some-redis:redis --link some-rabbit:rabbitmq nimmis / apache-php7

首先运行redis和rabbitmq容器。然后运行带有两个容器链接的webapps容器。

现在,要在Web应用程序中配置Redis主机-这很容易。您可以简单地使用env变量'REDIS_PORT_6379_TCP_ADDR'。因为一旦容器被链接,您就可以获得其env变量。然后redis导出该变量。

关于rabbitmq主机-在rabbit容器启动后,您可以通过以下方式获取ip:

    RABBITMQ_IP = $(docker inspect --format'{{.NetworkSettings.IPAddress}}'有点兔子)

然后在运行webapps容器时将其传递给--env。

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有