首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决同时运行两个端口组合文件时出现的“端口已分配”错误?

如何解决同时运行两个端口组合文件时出现的“端口已分配”错误?
EN

Stack Overflow用户
提问于 2016-10-31 08:36:34
回答 1查看 3.5K关注 0票数 2

我有许多项目基于码头-撰写文件与不同的设置。如果我想启动另一个项目,我将docker-compose stop当前项目和docker-compose up另一个。但是我的问题听起来是:如何开始两个或更多的对接者-与任何项目同时组合图像?我的操作系统linux ubuntu。我的码头编剧看上去是:

代码语言:javascript
复制
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

如果我尝试运行另一个项目,就会出现错误。

‘驱动程序无法在端点mpdockerenv_db_1绑定上编程外部连接,为0.0.0.0:3306失败:端口已经分配’

我想我应该从不同港口的集装箱里转发港口,但我不知道该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 09:38:13

是为您的问题准确构建句柄的工具。

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

通常,在一个docker-compose.yml文件中,您可以拥有您将要使用的任何对接者图像。

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

代码语言:javascript
复制
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

因此,如果我们看一下以下规则:

  • 端口:您可以映射外部端口输出:内部停靠端口
  • 环境:设置系统环境var
  • 卷:您正在从Filesystem : inside映射一个目录到docker容器(因此,即使您销毁了de容器,这些数据也将被阻止)
  • 链接: docker内部有少量的内部网络DNS管理,所以如果您键入: docker网络检查桥命令,您将看到Subnet范围和网关(通常为172.17.0.1 ),这意味着您在坞内运行的应用程序可以在内部看到对方,如果您放置链接和图像条目的名称,那么停靠器(小DNS)可以从一个容器ip映射到另一个容器ip。

另一点是,当修改了坞-组合以重新创建您所做的所有更改时,一个好主意是在(小心地,这将删除任何未映射的卷)之前使对接者-组合下来,以清除和释放空间。

查看docker-组合文件引用:

docker-撰写文件引用

在你的情况下

代码语言:javascript
复制
 ports:
    - 3306:3306

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

因此,只需换到其他自由港:

代码语言:javascript
复制
 ports:
    - 3308:3306
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40338801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档