2016-10-31 89 views
1

我有許多項目基於不同設置的碼頭構成文件。 如果我想開始另一個項目,我將docker-compose stop當前項目和docker-compose up另一個。 但我的問題聽起來如下:如何在同一時間啓動2個或更多docker-compose圖像與任何項目? 我的操作系統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 

,如果我嘗試運行另一個項目我有錯誤

「驅動程序無法在端點0.0.0.0:3306編程外部連接 mpdockerenv_db_1綁定失敗:端口已經 分配'

我想我應該會轉發端口從容器與不同的端口,但我不知道如何做到這一點。

+0

這些項目都是在同一個文件夾?如何調用圖像?你有沒有嘗試'碼頭 - 組成proj1'和'碼頭 - 組成proj2'。配置docker-compose.yml文件的外觀如何? –

+0

如果你同時運行兩個項目會發生什麼? – Rao

+0

每個項目語言環境位於不同的文件夾中,並擁有自己的docker-compose文件和設置。如果我嘗試運行另一個項目,我得到錯誤'驅動程序失敗編程端點mpdockerenv_db_1上的外部連接性綁定0.0.0.0:3306失敗:端口已分配' –

回答

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 

所以,如果我們一起來看看下面的規則:

  • 端口:你可以映射外部端口輸出:內部泊塢窗口

  • 環境:設置系統環境變量

  • 卷:你是從你的文件系統映射一個目錄:裏面 泊塢窗容器(所以即使你摧毀德容器將這些數據presisted)

  • 鏈接:泊塢窗內有一個小的內部網的DNS管理,所以如果你鍵入:docker network inspect bridge命令,你會看到Subnet range和一個網關(通常爲172.17.0.1),這意味着你在docker裏面運行的應用程序可以在內部看到對方認爲這個ip,如果你把鏈接和圖像輸入,碼頭工具(小DNS)可以從一個容器ip映射到另一個容器。

還有一點是讓一個碼頭工人,組成了當搬運工,撰寫修改重新創建你所做的一切變化,一個好主意是讓前泊塢窗,譜寫下(謹慎,這將被刪除任何未映射的卷)清除和釋放空間。

看看碼頭工人,撰寫文件參考:

docker-compose file reference

你的情況

ports: 
    - 3306:3306 

端口3306正在使用的主機。 (也許你有mysql的運行實例在你的系統,這樣的端口在使用中)

所以只要切換到其他空閒端口:

ports: 
    - 3308:3306 
+1

謝謝。我解決了我的問題。我的問題是與端口。 –

相關問題