具有不同上下文路径的多个 docker-compose 文件

Ans*_*rma 5 docker dockerfile docker-compose

我有 2 个需要一起运行的 docker-compose 文件,文件的位置就像

/home/project1/docker-compose.yml

/home/project2/docker-compose.yml

所以很明显这两个服务应该有不同的上下文路径

但是当我在 docker compose 命令下运行时

docker-compose -f /home/project1/docker-compose.yml -f /home/project2/docker-compose.yml 配置

我看到,两个服务都获得了相同的上下文路径

app:
    build:
      context: /home/project1
      dockerfile: Dockerfile
app2:
    build:
      context: /home/project1
      dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题我希望我的两个服务都有自己的项目路径,即。

应用服务应该有上下文路径 /home/project1

app2 服务应该有上下文路径 /home/project2

Maf*_*for 5

选项 1:对两个 docker-compose 文件中的上下文使用绝对路径

选项 2:使用绝对路径创建 docker-compose.override.yml:

version: "3"

services:
  service1:
    build:
      context: /home/project1
  service2:
    build:
      context: /home/project2
Run Code Online (Sandbox Code Playgroud)

并将其包含在 docker-compose 命令中:

docker-compose -f /home/project1/docker-compose.yml -f /home/project2/docker-compose.yml -f /home/docker-compose.override.yml config
Run Code Online (Sandbox Code Playgroud)

在 Linux 上,为了避免在 docker-compose.override.yml 中硬编码基本路径,您可以使用 PWD 环境变量:

services:
  service1:
    build:
      context: ${PWD}/project1
  service2:
    build:
      context: ${PWD}/project2
Run Code Online (Sandbox Code Playgroud)


Ans*_*rma 4

我发现可以运行多个服务的方式是:

1. 首先使用 docker build 命令为所有服务创建镜像

例如:在我的例子中,它是一个带有 Maven 构建工具的 Java 应用程序,所以我使用的命令:

mvn clean package docker:build -Denv=$ENV -DskipTests

2. 构建完所有镜像后,创建一个通用的 docker-compose 文件,如下所示

version: '3'

services:
  service1:
    image: <service1-image>
    ports:
      - "8100:8080"
    environment:
      - TZ=Asia/Kolkata
      - MYSQL_USER=root
      - MYSQL_PASSWORD=unroot
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
  service2:
    image: <service2-image>
    ports:
      - "8101:8080"
    environment:
      - TZ=Asia/Kolkata
      - MYSQL_USER=root
      - MYSQL_PASSWORD=unroot
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
  service3:
    image: <service3-image>
    environment:
      - TZ=Asia/Kolkata
      - MYSQL_USER=root
      - MYSQL_PASSWORD=unroot
    ulimits:
      nproc: 65535
      nofile:
        soft: 65535
        hard: 65535
networks:
  default:
    external:
      name: dev
Run Code Online (Sandbox Code Playgroud)

方式我已经提到了mysql的root、密码,也可以添加环境变量。

3.然后运行以下命令来运行所有服务

docker-compose -f docker-compose.yml up

或运行以下命令来运行特定服务

docker-compose -f docker-compose.yml up service1

这对我来说效果很好,这需要 1 次设置,但之后就会非常简单和快速。