在工作流步骤中获取服务容器名称

zol*_*olv 4 docker github-actions

我的一般问题是:如何在 Github 工作流程中获取正在运行的服务名称?

\n

我有一个 Keycloak 容器设置为服务,我想通过在 Keycloak 容器内执行脚本来导入领域,这是我的工作流程的片段:

\n
name: Test Workflow\n\non:\n  push:\n    branches-ignore:\n      - main\n\njobs:\n  test:\n    name: Test\n    runs-on: ubuntu-latest\n\n    services:\n      keycloak:\n        image: quay.io/keycloak/keycloak:12.0.4\n        env:\n            KEYCLOAK_USER: "admin"\n            KEYCLOAK_PASSWORD: "admin"\n            JAVA_OPTS_APPEND: "-Dkeycloak.profile.feature.upload_scripts=enabled"\n        ports:\n            - "8091:8080"\n        volumes:\n            - "/workspace/src/main/resources/keycloak:/src/main/resources/keycloak/"\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v2\n\n      - name: Setup Java\n        uses: actions/setup-java@v1\n        with:\n          java-version: 14\n\n      - name: List running containers\n        run: docker ps -a\n\n      - name: Setup Keycloak realm\n        run: |\n            docker exec -it keycloak sh -c \n            "/opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin && \n            /opt/jboss/keycloak/bin/kcadm.sh create realms -s realm=testrealm -s enabled=true && \n            /opt/jboss/keycloak/bin/kcadm.sh create partialImport -r testrealm -s ifResourceExists=SKIP -o -f /src/main/resources/keycloak/realm.json"\n\n      - name: Gradle Test\n        run: ./gradlew test\n\n[...]\n\n
Run Code Online (Sandbox Code Playgroud)\n

要连接到正在运行的容器,我需要它的名称。服务名称keycloak不起作用,正如我在 Github 操作日志中看到的正在运行的容器列表一样:

\n
Run docker ps -a\nCONTAINER ID   IMAGE                                       COMMAND                  CREATED              STATUS              PORTS                              NAMES\nfdb7e1e05296   quay.io/keycloak/keycloak:12.0.4            "/opt/jboss/tools/do\xe2\x80\xa6"   55 seconds ago       Up 47 seconds       8443/tcp, 0.0.0.0:8091->8080/tcp   594297e586cd4bdab13cc8fa63b8954d_quayiokeycloakkeycloak1104_1ac754\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法通过运行容器名称连接到正在运行的容器?

\n

Mor*_*lst 5

两种选择:

  1. --name您可以在服务对象选项中设置:
jobs:
  test:
    name: Test
    ...
    
    services:
      keycloak:
        ...

        options: --name keycloak --hostname keycloak
Run Code Online (Sandbox Code Playgroud)

可能的 docker create 选项

工作流程语法文档

  1. 根据此示例,您的服务对象的密钥可以用作hostname. 但这似乎仅在从容器内运行作业时才相关。