docker-compose容器使用具有多个项目的错误容器

时间:2018-02-13 23:02:56

标签: docker docker-compose

我有两个项目,我需要两个不同的docker environnement(容器)。我在两个不同的项目中有两个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

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

我为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,但它失败了。
  4. 如何保留两个不同的容器,并使用docker-compose stopdocker-compose up轻松地从一个容器切换到另一个?

    编辑1

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

3 个答案:

答案 0 :(得分:3)

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

$ docker-compose --help
  ...
  -p, --project-name NAME    Specify an alternate project name (default: directory name)

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

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

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

答案 1 :(得分:2)

我找到了解决方案

docker-compose -p projectname build 
docker-compose -p projectname up

答案 2 :(得分:0)

您的问题来自端口。在定义公共端口时,每个容器都必须有自己的端口。因此,在第二个项目中,更改db和web的端口(例如42334和3001)。