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

我有很多基于不同设置的docker-compose文件的项目。 如果我想开始另一个项目,我将docker-compose stop当前的项目和docker-compose up另一个项目。 但我的问题听起来像:如何启动2个或更多的docker,同时与任何项目组成的图像? 我的操作系统Linux Ubuntu的。 我的docker构成看起来像:

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

我想我应该会转发从不同端口的容器的端口,但我不知道如何做到这一点。

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

  • 环境:设置系统环境variables

  • 卷:你正在从你的Filesystem:里面映射一个目录到docker容器(所以即使你销毁了de容器,这些数据也会被压制)

  • 链接:docker在内部有一个内部networking的DNSpipe理,所以如果你input:docker network inspect bridge命令,你会看到子网范围,也是一个网关(通常是172.17.0.1),这意味着你在Docker中运行的应用程序可以看到对方内部以为这个IP,如果你把链接和图像条目的名称,docker(小DNS)可以从一个容器IP映射到其他。

还有一点是在docker-compose被修改为重新创build你所做的所有更改时创build一个docker-compose,一个好主意是在docker-compose之前(小心地这将删除任何未映射的卷)到清晰自由的空间。

看看docker-compose文件参考:

docker – 撰写文件参考

在你的情况

  ports: - 3306:3306 

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

所以简单地换成其他自由端口:

  ports: - 3308:3306