我是新来的码头和蒙哥大的。我有一个带有数据库和集合的mongodb容器。我使用以下命令使用php和apache创建了另一个容器:
docker run -d -p 8020:80 --name my-php-apache php:7-apache为了能够连接到mongodb容器(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 (8020:80)和的端口应该是相同的吗?还是应该是不同的?有没有更好的方法链接2容器(php和mongodb)?我只需要从php容器连接到mongodb容器,就可以在mongodb数据库中插入一些数据。
发布于 2019-11-05 10:35:45
你不应该在现代码头上使用docker run --link。您需要创建一个码头网络 (默认设置很好),然后运行连接到该网络的两个容器。使用容器的--name作为主机名,容器将能够相互访问。
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,它会自动完成这个设置。.)
每次您docker run某个东西时,它都会创建一个新容器。链接是容器的一个属性,它允许它连接到Docker 1.0之前存在的网络模型中的特定其他容器;在启动第一个容器时需要指定它。在您的示例中,您正在运行一个容器,然后使用链接设置运行该容器的第二个副本;因为两个容器都发布了相同的主机端口(-p 8020:...),因此会出现冲突。如果要使用--link,它将位于第一个docker run命令上,而不需要第二个命令。
发布于 2019-11-05 02:59:28
问题是,您在同一个端口8020上公开了两个容器,因此必须侦听8021。
https://docs.docker.com/engine/reference/commandline/run/提取液
发布或公开端口(-p,--公开) $ docker运行-p 127.0.0.1:80:8080/tcp ubuntu 这将容器的端口8080绑定到主机的127.0.0.1上的TCP端口80。还可以指定udp和sctp端口。“码头用户指南”详细解释了如何操作Docker中的端口。
发布于 2019-11-04 21:34:48
手将两个容器绑定到主机maschine上的同一个端口。两者都绑定到端口80。您应该为第二个集装箱使用另一个端口,如81。
docker run -d -p 8020:81 --link my-mongo --name php-mongo-link php:7-apachehttps://stackoverflow.com/questions/58701187
复制相似问题