这是我键入时的结果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
Run Code Online (Sandbox Code Playgroud)
但它仍然无效
这是我在webapps上的config.php,当我尝试通过rabbitmq发送消息时
define('HOST', 'localhost');
define('PORT', 5672);
Run Code Online (Sandbox Code Playgroud)
我试图用hostname更改localhost
define('HOST', 'rabbitmq');
define('PORT', 5672);
Run Code Online (Sandbox Code Playgroud)
错误消息是连接拒绝...似乎在我的三个容器需要配置/映射/绑定网络在同一个IP?
Far*_*ahi 90
链接是一项传统功能.请使用"用户定义的网络":
sudo docker network create mynetwork
Run Code Online (Sandbox Code Playgroud)
然后使用此网络重新运行您的容器:
sudo docker run --name rabbitmq -p 8080:80 -d --network mynetwork rabbitmq
Run Code Online (Sandbox Code Playgroud)
对于您希望彼此连接的其他容器,请执行相同的操作.
使用"用户定义的网络",您可以使用"内部名称解析"(有点像访问网站时的域名解析).您可以使用要引用的容器的名称,以便解析容器的IP地址,只要它们在相同的"用户定义的网络"上运行即可.这样,您可以rabbitmq在同一网络上的其他容器中解析容器的IP地址及其名称.
同一"用户定义网络"上的所有容器都将具有网络连接.不需要"遗留链接".
Pit*_*itt 17
对于容器间依赖关系和链接,您将需要使用docker-compose可以在容器之间定义链接的位置.
在存储Docker文件的根目录中,只需创建一个名为的新文件docker-compose.yml,在这里您可以将容器定义为相互依赖的服务,如下所示:
version: '2'
services:
webapps:
build: .
links:
- "rabbitmq:rabmq"
- "redis"
rabbitmq:
image: rabbitmq
redis:
image: redis
Run Code Online (Sandbox Code Playgroud)
所以在这里的webapps服务定义中,你会看到links其他两个服务rabbitmq和redis.这意味着当webapps构建容器时,会对其hosts文件进行输入,以便将域名redis转换为实际容器的IP和端口号.
您可以选择使用service:alias表示法更改此容器的地址名称,就像我定义rabbitmq使用rabmq容器内的别名一样webapps.
现在使用docker-compose类型来构建和启动容器:
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
因此,连接到另一个容器就像使用此别名作为主机名一样简单.
由于您docker-compose在这种情况下使用它,它会自动创建一个docker网络来连接所有容器,因此您不必担心这一点.但是有关更多信息,请查看文档:https:
//docs.docker.com/compose/networking/#/specifying-custom-networks
小智 6
您需要将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。
小智 5
根据我的经验,使用诸如 docker-compose.yml 之类的声明是可以的,但您只需使用
docker run -d -P -link nimmis/apache-php7 rabbitmq redis
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52686 次 |
| 最近记录: |