我有一个docker-compose.yml
文件,它提供了几种服务(redis,db,mongo,app)。我制作了一个脚本来启动Docker环境,但是强迫您转发环境变量,该变量将充当该应用程序(PHP Web应用程序)的子域。
因此对于应用容器,我拥有:
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
image: xxx:xxx
container_name:my-app-${ENV}
restart: always
depends_on:
...
现在,我希望能够启动多个都依赖于已启动容器的应用程序(例如,使用同一数据库的app1.com
和app2.com
)。
所以我试图通过使用它来提起它:
ENV=$1 VIRTUAL_HOST=$1.com docker-compose up -d --build app
(我正在使用nginx容器启用虚拟主机,并且$1
来自bash脚本)。但这只是重建已经存在的应用程序容器并添加一个新名称。
我可以在构建全新的应用容器时运行docker-compose
,如果其他容器已经存在,则保持完整吗?
答案 0 :(得分:0)
您可以运行docker-compose up -d [NEW APPNAME]
以在撰写文件中构建/运行特定的应用程序
尝试...
docker-compose build [appName]
docker-compose up --no-deps -d [appName]
第一个命令使用[appName]
第二个命令停止,销毁并重新创建[appName]
容器。
--no-deps
标志阻止Compose重新创建[appName]依赖的任何服务
您的应用必须使用不同的名称,因为compose会使用该名称来构建,停止和创建所有容器。
因此您的撰写文件应类似于:
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
image: xxx:xxx
container_name:my-app-${ENV}
restart: always
depends_on: ...
app2:
build:
context: .
dockerfile: ./docker/app/Dockerfile
image: xxx:xxx
container_name:my-app2-${ENV}
restart: always
depends_on: ...
app3:
build:
context: .
dockerfile: ./docker/app/Dockerfile
image: xxx:xxx
container_name:my-app3-${ENV}
restart: always
depends_on: ...
上面为应用程序容器使用了相同的Dockerfile。
要为每个应用使用不同的dockerfile,只需更改dockerfile