docker-compose 容器在多个项目中使用了错误的容器

Kou*_*uja 9 docker docker-compose

我有两个项目,我需要两个不同的 docker 环境(容器)。我docker-compose.yml在两个不同的项目中有两个文件。foo项目和bar项目。

foo/src/website/docker-compose.yml#1 ( foo)

version: '3'
services:
  db:
    env_file: .env
    image: mariadb:10.0.23
    container_name: foo-db
    ports:
      - "42333:3306"
    restart: always
  web:
    image: project/foo
    container_name: foo-web
    env_file: .env
    build: .
    restart: always
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails server -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/webapps/foo
    ports:
      - "3000:3000"
    depends_on:
      - db
Run Code Online (Sandbox Code Playgroud)

bar/src/website/docker-compose.yml#2 ( bar)

version: '3'
services:
  db:
    image: mysql:5.5.50
    container_name: bar-db
    ports:
      - "42333:3306"
    env_file: .env
    restart: always
  web:
    image: project/bar
    container_name: bar-web
    env_file: .env
    build: .
    restart: always
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails server -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/webapps/bar
    ports:
      - "3000:3000"
    depends_on:
      - db
Run Code Online (Sandbox Code Playgroud)

我为我做这个命令foo的项目docker-compose builddocker-compose up,一切正常。在 Kitematic 中,我看到我的两个容器带有好名字 ( foo-web)。

  1. 我执行此命令是为了停止我的图像docker-compose stop
  2. 我转到我的第二个项目 ( bar) 并运行docker-compose builddocker-compose up。一切正常,但我的容器名称现在被bar-web.
  3. 我停止了我的第二个图像,docker-compose stop并尝试再次docker-compose up在我的foo项目文件夹中执行,但它失败了。

我怎样才能保持两个不同的容器,并轻松地从一个切换到另一个与docker-compose stopdocker-compose up

编辑 1

我发现了这个问题,docker-compose.yml我的两个项目所在的主文件夹具有相同的文件夹名称。我可以解决这个问题还是需要重命名我的文件夹?

Vik*_*ote 9

是的,目录名称是以下项目的默认项目名称docker-compose

$ docker-compose --help
  ...
  -p, --project-name NAME    Specify an alternate project name (default: directory name)
Run Code Online (Sandbox Code Playgroud)

使用-p参数指定特定的非默认项目名称。

或者,您也可以设置COMPOSE_PROJECT_NAME环境变量(默认为basename项目目录的 )。

如果您在具有多个撰写文件的文件和项目之间共享撰写配置,请参阅链接以获取更多信息。