我有很多项目基于具有不同设置的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失败:端口已经存在 分配'
我想我应该从具有不同端口的容器中转发端口,但我不知道该怎么做。
答案 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文件参考:
在你的情况下
ports:
- 3306:3306
端口3306正由主机使用。 (可能你的系统中有一个正在运行的mysql实例,因此端口正在使用中)
只需更改为其他自由端口:
ports:
- 3308:3306