首页 > 解决方案 > 组合后在docker容器中执行命令

问题描述

我正在尝试在组合后自动执行 docker 容器中的某些命令。我的第一个想法是使用 gradle任务(由 docker 插件提供)并从扩展(由 docker compose 插件提供DockerExecContainer)中检索目标容器 id 。dockerCompose

我认为这样的事情会起作用:

plugins {
    id 'com.avast.gradle.docker-compose' version '0.12.1'
    id 'com.bmuschko.docker-remote-api' version '6.4.0'
}

import com.bmuschko.gradle.docker.tasks.container.DockerExecContainer

task setupPhabricator(type: DockerExecContainer) {
    containerId.set(dockerCompose.servicesInfos.phabricator.firstContainer.containerId)
    commands.add(['echo', '$PHABRICATOR_HOST'] as String[]) 
}

dockerCompose {
    isRequiredBy(setupPhabricator)
}

这失败了,因为dockerCompose.servicesInfos.phabricatoris null。这是有道理的,因为在配置时容器还没有启动。

我想我应该在执行阶段设置容器 ID:

task setupPhabricator(type: DockerExecContainer) {
    commands.add(['echo', '$PHABRICATOR_HOST'] as String[])
    doFirst {
        containerId.set(dockerCompose.servicesInfos.phabricator.firstContainer.containerId)
    }
}

但这失败了:

No value has been specified for property 'containerId'

我想我在这里遗漏了一些基本的东西,所以欢迎任何想法。

标签: dockergradledocker-compose

解决方案


推荐阅读