【问题标题】:Multiple Rails Application docker up not working多个 Rails 应用程序 docker up 不工作
【发布时间】:2021-05-15 22:00:42
【问题描述】:

我有两个 Rails 6 应用程序,我试图部署在具有不同端口 80808081aws ec2 实例中,但是当我尝试运行 docker-compose up -d 时,它会成功启动一个 rails 应用程序,如果我尝试为第二个应用程序运行docker-compose up -d,它会关闭第一个应用程序并在特定端口上启动另一个应用程序

以下是我的两个应用程序的 docker 配置。

应用 1

version: "3.4"
services:
  app:
    image: "dockerhub_repo/a_api:${TAG}"
    # build:
    #   context: .
    #   dockerfile: Dockerfile
    container_name: a_api_container
    depends_on:
      - database
      - redis
      - sidekiq
    ports:
      - "8080:8080"
    volumes:
      - .:/app
    env_file: .env
    environment:
      RAILS_ENV: staging
  database:
    image: postgres:12.1
    container_name: a_database_container
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  sidekiq:
    image: "dockerhub_repo/a_api:${STAG}"
    container_name: a_sidekiq_container
    environment:
      RAILS_ENV: staging
    env_file: .env
    depends_on:
      - redis
    volumes:
      - ".:/app"
  redis:
    image: redis:4.0-alpine
    container_name: a_redis_container
    volumes:
      - "redis:/data"
volumes:
  redis:
  db_data:

应用 2

version: "3.4"
services:
  app:
    image: "dockerhub_repo/b_api:${PPTAG}"
    build:
      context: .
      dockerfile: Dockerfile
    container_name: b_api
    depends_on:
      - database
      - redis
    ports:
      - "8081:8081"
    volumes:
      - .:/app
    env_file: .env
    environment:
      RAILS_ENV: development
  database:
    image: postgres:12.1
    container_name: pp_database
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
  redis:
    image: redis:4.0-alpine
    container_name: pp_redis
volumes:
  db_data:

此配置在本地机器上运行良好。它在不同端口上的本地启动两个应用程序,但在 aws ec2 上存在一些问题。我不确定配置有什么问题吗?

【问题讨论】:

  • 是目录下的两个docker-compose.yml文件同名吗; /app-a/docker/app-b/docker 之类的?这可能会使 Compose 感到困惑。
  • @DavidMaze 是的,第一个在 app1/backend 中,第二个在 app2/backend 中。我重命名了它,它就像魅力一样。非常感谢。但我没有得到类似的东西文件夹名称如何导致问题?

标签: ruby-on-rails docker amazon-ec2 docker-compose


【解决方案1】:

Compose 具有项目名称的概念。如果您在 docker-compose.yml 文件中添加或删除容器,它会查找标有项目名称的现有容器,以确定需要更改的内容。项目名称也包含在容器、网络和卷的 Docker 名称中。

您可以使用COMPOSE_PROJECT_NAME environment variabledocker-compose -p 选项配置项目名称。如果不配置,默认为当前目录的基名。

您在评论中澄清这两个docker-compose.yml 文件位于目录app1/backendapp2/backend 中。由于这些目录的基本名称都是backend,因此它们具有相同的项目名称;因此,如果您在app2/backend 目录中运行docker-compose up,它会找到backend 项目的现有容器,发现它们与docker-compose.yml 文件中的内容不匹配,并删除它们(即使您是操作员认为它们属于另一个项目)。

有几种方法可以解决这个问题:

  • 重命名一个或另一个目录;可能会将docker-compose.yml 文件移动到顶级app1app2 目录。
  • 在一个或两个目录中,创建一个设置COMPOSE_PROJECT_NAME=app1.env file。 (请注意,文件是在当前目录中检查的,不一定是包含docker-compose.yml 文件的目录。)
  • 设置和更改环境变量export COMPOSE_PROJECT_NAME=app1
  • 始终将选项 docker-compose -p app1 ...all 组合命令一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多