将php容器与mongodb容器链接

我是Docker和Mongodb的新手。我有一个具有数据库和集合的mongodb容器。我使用以下命令用php和apache创建了另一个容器:

docker run -d -p 8020:80 --name my-php-apache php:7-apache

为了能够连接到mongodb容器(my-mongo),我需要将此容器链接到mongodb容器。因此,我使用以下命令链接了两个容器:

docker run -d -p 8020:80 --link my-mongo --name php-mongo-link php:7-apache

但是它显示以下错误:

b36e400bb5c0d229f952a7b365d5a8bfed402410bdb5a802f29fd2fdc1ef28f9

docker: Error response from daemon: driver failed programming external connectivity on endpoint php-mongo-link (ec4eb66d0a314201c99f79eb4a09cf82ffb2fc399647020adaf34932878857b7): Bind for 0.0.0.0:8020 failed: port is already allocated.

要链接容器,php-apache(8020:80)和php-mongo-link的端口应该相同吗?还是应该有所不同?有没有更好的方法来链接2个容器(php-apache和mongodb)?我只需要从php容器连接到mongodb容器,即可在mongodb数据库中插入一些数据。

robertjp 回答:将php容器与mongodb容器链接

问题是您将两个容器都暴露在同一端口8020上,因此必须在8021上侦听。

https://docs.docker.com/engine/reference/commandline/run/提取

  

发布或公开端口(-p,-expose)

     

$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

     

这会将容器的端口8080绑定到127.0.0.1上的TCP端口80   主机。您还可以指定udp和sctp端口。码头工人   用户指南详细说明了如何在Docker中操作端口。

,

您将两个容器手动绑定到主机上的相同端口。两者都绑定到端口80。您应该为第二个容器使用另一个端口,例如81。

docker run -d -p 8020:81 --link my-mongo --name php-mongo-link php:7-apache
,

您完全不应该在现代Docker上使用Collections.sort(listofsprites,(s1,s2) -> { float result = s1.z - s2.z; if (result == 0f) result = s1.y - s2.y; return ((int)(result)); }); 。您需要create a Docker network(默认设置就可以了),然后运行连接到该网络的两个容器。这些容器将能够使用容器的docker run --link作为主机名来相互访问。

--name

(如果您使用Docker Compose,it does this setup automatically。)

每次docker network create myapp docker run \ -d \ # in the background --net myapp \ # attached to the network -v ... \ # with persistent storage --name my-mongodb \ mongo:4.2 docker run \ -d \ # in the background --net myapp \ # attached to the network -p 8020:80 \ # accessible from outside --name my-php-apache \ -e MONGO_URL=mongodb://my-mongodb:27017 \ php:7-apache 都会创建一个新的容器。链接是容器的一种属性,它允许它连接到Docker 1.0之前存在的网络模型中的特定其他容器。启动第一个容器时需要指定它。在您的示例中,您正在运行一个容器,然后使用链接设置运行它的第二个副本。您会因为两个容器发布相同的主机端口(docker run)而发生冲突。如果要使用-p 8020:...,它将在第一个--link命令上,并且您不需要第二个。

本文链接:https://www.f2er.com/3163674.html

大家都在问