如何同时运行两个或多个docker-compose文件

时间:2016-10-31 08:36:34

标签: docker docker-compose

我有很多项目基于具有不同设置的docker-compose文件。 如果我想开始另一个项目,我将docker-compose stop当前项目和docker-compose up另一个项目。 但我的问题听起来像:如何同时启动2个或更多的docker-compose图像与任何项目? 我的OS linux ubuntu。 我的码头工作者看起来像:

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失败:端口已经存在   分配'

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

1 个答案:

答案 0 :(得分:2)

docker-compose是一个用于处理问题的精确构建的工具。

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

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

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端口

  • 环境:设置系统环境var

  • 卷:您将文件系统中的目录映射到: docker container(所以即使你破坏de容器,这些数据也会被预先存在)

  • 链接:docker内部有一点内部网络DNS管理,所以如果你输入:docker network inspect bridge命令你会看到Subnet范围和网关(通常是172.17.0.1),这意味着你在里面运行的应用程序docker可以看到对方内部认为这个ip,如果你把链接和图像条目的名称,docker(小DNS)可以从一个容器ip映射到其他。

另一点是当修改docker-compose以重新创建你所做的所有更改时,建立一个docker-compose,一个好主意是之前使docker-compose down(小心这将删除任何未映射的())清理空间。

看看docker-compose文件参考:

docker-compose file reference

在你的情况下

 ports:
    - 3306:3306

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

只需更改为其他自由端口:

 ports:
    - 3308:3306