2017-07-21 2 views
0

Je reçois l'erreur suivante lors de l'étape "test_image" lors de l'exécution de tests sur les images docker dans mon pipeline CI gitlab. Je ne peux pas le reproduire localement, il ne se produit que sur la boîte du coureur gitlab. Des idées?Le nom du conteneur est déjà utilisé par le conteneur - gitlab ci

Le nom du conteneur "/ common_run_1" est déjà utilisé par conteneur

image: docker:latest 

stages: 
    - build 
    - test 
    - release 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN myregistry.gitlab 

build_image: 
    stage: build 
    script: 
    - docker build --pull -t $CONTAINER_TEST_IMAGE . 
    - docker-compose up -d --build 
    - docker push $CONTAINER_TEST_IMAGE 

pylint: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker-compose run common pylint common 

test_image: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker-compose run common nosetests common 

push_master_image: 
    stage: release 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_MASTER_IMAGE 
    - docker push $CONTAINER_MASTER_IMAGE 
    only: 
    - master 

push_prod_image: 
    stage: release 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_PROD_IMAGE 
    - docker push $CONTAINER_PROD_IMAGE 
    only: 
    - prod 

Mise à jour: Il y a plusieurs suggestions d'utiliser simplement "docker-Compose vers le bas" ou "arrêt docker". Je l'ai fait sur ma boîte gitlab-runner (processus docker, images, volumes et réseaux complètement nettoyés), et j'ai soumis de nouveau la requête de pipeline. Dans ce cas, j'obtiens la même erreur dans le pipeline gitlab. Cela me fait penser qu'il y a un problème de concurrence à l'étape du «test». De plus, si j'ajoute une étape "test2" et y place le script "pylint", le pipeline réussira, renforçant encore l'idée d'un problème de simultanéité.

+0

J'ai mis à jour ma réponse! Vérifiez s'il vous plaît! – Ayushya

Répondre

2

Votre étape: test consiste en deux exécutions de composition de docker et les deux s'exécutent en utilisant le même nom de conteneur. Vous pouvez changer cela en ajoutant --name test1 en docker-compose run du premier test et --name test2 en docker-compose run du deuxième test.

Réponse originale

Exécuter docker ps -a et il donnera la liste dont les noms contenant sont déjà utilisés. Cela est principalement dû au fait que vous avez déjà exécuté le conteneur en utilisant docker-compose up et que les conteneurs sont toujours ouverts.

Vos options sont

  1. Run docker-compose down. Cela devrait faire tomber les conteneurs déjà en cours d'exécution. Et devrait probablement résoudre votre erreur.
  2. Si l'option 1 échoue, vous pouvez voir quels conteneurs sont en cours d'exécution et arrêter ces conteneurs en exécutant docker stop <container_name>.
+0

Le nom du conteneur doit inclure la variable '$ CI_JOB_ID' afin qu'il ne soit pas en conflit avec les canaux en cours d'exécution pour d'autres validations. –