我有一个 docker-compose.yml
docker-compose.yml
app: build: context: . dockerfile: ./docker/app/Dockerfile image: ... container_name: app-${ENV} depends_on: - db expose: - 80 db: image: ... container_name: my-cool-db ports: - "3306:3306"
这就是重点 app 正在根据参数获取容器名称。因此,基本上我有一个运行以下命令的shell脚本:
app
ENV=$1 docker-compose -p $1 up -d
sh initializer.sh first 我会得到 app-first 容器。 -p 参数是指定的,因此可以将同一容器的多个实例分类为不同的项目。
sh initializer.sh first
app-first
-p
app-first app-second app-third
我想要实现的是让所有容器使用相同的DB。但是当我做一个 docker-compose 我的DB容器仍然希望独立于他的存在而成长。
docker-compose
它试图以不同的项目名称创建一个DB,但使用相同的容器名称,从而导致冲突,这是一个问题吗?
是否可以在不使用2个单独的DB容器的情况下进行此操作?
黑客解决方案:
将撰写文件更改为
services: app: image: ... container_name: app-${ENV} networks: - shared expose: - 80 db: image: ... container_name: my-cool-db networks: - shared ports: - "3306:3306" networks: shared: external: true
然后首先创建网络 docker network create shared
docker network create shared
打开数据库: docker-compose up -d db
docker-compose up -d db
第一个应用程序: ENV=first docker-compose -p first up -d app
ENV=first docker-compose -p first up -d app
第二个应用程序: ENV=second docker-compose -p second up -d app
ENV=second docker-compose -p second up -d app