2017-08-28 379 views
4

我想爲運行在同一服務器上的多個項目使用MySQL docker容器。docker-compose:通過使用相同的container_name在多個項目之間共享容器

使用泊塢窗,撰寫V3文件,我只是在每個項目的相同mysql的容器配置,並且它們具有相同的container_name

version: "3" 

services: 
    app1: 
    image: foo 
    links: 
     - mysql 

    mysql: 
    image: mysql/mysql:5.7 
    container_name: shared_mysql 

第二個應用程序也有類似的docker-compose.yml文件,但而不是app1

當運行docker-compose up --no-recreateapp2,我得到一個錯誤:

Creating shared_mysql ... error 
ERROR: for shared_mysql 
Cannot create container for service mysql: Conflict. 
The container name "/shared_mysql" is already in use by container "deadbeef". 
You have to remove (or rename) that container to be able to reuse that name. 

我能做些什麼來共享多個泊塢窗項目之間MySQL的容器?

回答

0

如果您的容器僅由其他撰寫文件創建,則可以使用docker-compose中的external links功能。

如果你想要兩個碼頭組成文件能夠創建mysql容器,我建議你看看Share Compose configurations between files and projects。在這種情況下,您可以創建一個只定義mysql並在兩個應用程序撰寫文件中擴展/合併的基本文件。

+0

對不起,我已經在使用--no-recreate。我已經更新了這個問題。 – cweiske

0

您可以簡單地避免在兩個docker-compose.yml文件之一中重新定義mysql,並將mysql和其他容器連接到同一個網絡。

爲了做到這一點,建立網絡

泊塢窗網創建共享

網絡分配給你的MySQL容器:

version: '3' 
services: 
    mysql: 
    ... 
    networks: 
    - shared 
networks: 
    shared: 
    external: 
     name: shared 

對於已經需要訪問的任何其他容器mysql,只需添加與上面相同的網絡定義:

version: '3' 
services: 
    app1: 
    ... 
    networks: 
    - shared 
    app2: 
    ... 
    networks: 
    - shared 
    ... 
networks: 
    shared: 
    external: 
     name: shared 
+0

這引入了從mysql-less組合文件到compose-with-mysql的依賴關係,如果mysql容器定義在兩個組合文件中,將會避免這種依賴關係。 – cweiske

1

我們通過使用第三個項目來解決它,包括我們的微服務使用的所有共享服務,如mysql,kafka和redis。

在我們的每個docker-compose文件中,我們都添加了一個到這些服務的外部鏈接。

它有點髒,但它運作良好。

您可以在github上關注此問題,https://github.com/docker/compose/issues/2075 正在討論您正在努力解決的同一問題。

相關問題