gpt4 book ai didi

docker - 同时运行两个 docker-compose 文件时如何解决 "port is already allocated"错误?

转载 作者:行者123 更新时间:2023-12-02 18:16:08 27 4
gpt4 key购买 nike

我有许多基于具有不同设置的 docker-compose 文件的项目。
如果我想开始另一个项目,我会 docker-compose stop当前项目和docker-compose up其他。
但我的问题听起来是:如何同时使用任何项目启动 2 个或更多 docker-compose 图像?
我的操作系统 linux ubuntu。
我的 docker-compose 看起来像:

application:
build: code
volumes:
- ./mp:/var/www/mp
- ./logs/mp:/var/www/mp/app/logs
tty: true
db:
image: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mp-DB
MYSQL_USER: root
MYSQL_PASSWORD: root
php:
build: php-fpm
ports:
- 9000:9000
volumes_from:
- application
links:
- db
nginx:
build: nginx
ports:
- 80:80
links:
- php
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
elk:
image: willdurand/elk
ports:
- 81:80
volumes:
- ./elk/logstash:/etc/logstash
- ./elk/logstash/patterns:/opt/logstash/patterns
volumes_from:
- application
- php
- nginx

如果我尝试运行另一个项目,我会收到错误

'driver failed programming external connectivity on endpoint mpdockerenv_db_1 Bind for 0.0.0.0:3306 failed: port is already allocate'



我想我应该会从具有不同端口的容器中转发端口,但我不知道该怎么做。

最佳答案

docker-compose 是一个为您的问题准确构建的工具。

我的意思是想象你有一个复杂的项目,你需要组织并有更干净的方式来处理系统环境。

通常在 docker-compose.yml 文件中,你可以使用你将使用的普通 docker 图像。

f.example 我使用的部分文件:

mongo:
image: mongo:latest
ports:
- "3002:27017"
environment:
MONGODB_DATABASE: "meteor-console-dev"

php-fpm-dev:
image: jokediaz/php-fpm.5.6-laravel
volumes:
- ./repos/datamigration:/usr/share/nginx/html/datamigration
- ./unixsock:/sock
- ./config/php-fpm-5.6/:/usr/local/etc/php
links:
- mongo

因此,如果我们看一下以下规则:
  • 端口:您可以映射外部端口输出:内部 docker 端口
  • environment : 设置系统环境变量
  • 卷:您正在从文件系统映射目录:内部到
    docker 容器(所以即使你破坏了容器,这些数据也会被保存)
  • 链接:docker内部有一点内部网络DNS管理,所以如果你输入:docker network inspect bridge命令你会看到子网范围和网关(通常是172.17.0.1),这意味着你在docker内部运行的应用程序可以在内部看到彼此认为这个 ip ,如果你把链接和图像条目的名称,docker(小 DNS)可以从一个容器 ip 映射到另一个。

  • 另一点是在修改 docker-compose 以重新创建您所做的所有更改时制作 docker-compose up ,一个好主意是在之前制作 docker-compose down (小心这将删除任何未映射的卷)清晰和自由的空间。

    看看 docker-compose 文件引用:

    docker-compose file reference

    在你的情况下
     ports:
    - 3306:3306

    端口 3306 正在被主机使用。 (可能您的系统中有一个正在运行的 mysql 实例,因此端口正在使用中)

    所以只需更改为其他自由端口:
     ports:
    - 3308:3306

    关于docker - 同时运行两个 docker-compose 文件时如何解决 "port is already allocated"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40338801/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com