簡體   English   中英

docker-compose:使用相同的container_name在多個項目之間共享容器

[英]docker-compose: Sharing container between multiple projects by using the same container_name

我想在同一台服務器上運行多個項目使用MySQL docker容器。

使用docker-compose 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文件,但使用app2而不是app1

當運行docker-compose up --no-recreate for app2 ,我收到一個錯誤:

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.

如何在多個docker項目之間共享MySQL容器?

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

為此,請創建一個網絡:

docker network create shared

將您的網絡分配給您的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

如果您的容器僅從其他撰寫文件創建,則可以使用docker-compose中的外部鏈接功能。

如果您希望docker compose文件都能夠創建mysql容器,我建議您查看文件和項目之間的Share Compose配置 在這種情況下,您可以創建一個僅定義mysql的基本文件,並在兩個應用程序撰寫文件中擴展/合並它。

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

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM