Docker Impossible d’établir un lien avec un conteneur non actif

J’ai besoin de créer des conteneurs Rails et Mysql avec docker-compose. Lorsque j’essaie de créer des liens entre des conteneurs avec docker-compose up , je reçois

Impossible de démarrer le conteneur 9b271c58cf6aecaf017dadaf5b Impossible d’établir une liaison avec un conteneur non actif: / puma_db_1 AS / puma_web_1 / db

Des dossiers

Dockerfile

 FROM ubuntu:14.04 RUN apt-get -y update RUN apt-get -y install git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev RUN apt-get -y install libmysqlclient-dev RUN git clone https://github.com/sstephenson/rbenv.git /root/.rbenv RUN git clone https://github.com/sstephenson/ruby-build.git /root/.rbenv/plugins/ruby-build RUN echo 'eval "$(rbenv init -)"' >> $HOME/.profile RUN echo 'eval "$(rbenv init -)"' >> $HOME/.bashrc RUN rbenv install 2.1.5 RUN rbenv global 2.1.5 RUN gem install rails -v 4.0.11 ADD app.tar.gz /home/ WORKDIR /home/app RUN bundle install EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"] 

docker-compose.yml

 db: image: mysql:latest environment: MYSQL_DATABASE: app_development MYSQL_USER: mysql DATABASE_PASSWORD: onetwo ROOT_PASSWORD: onetwo web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - "4000:3000" links: - db 

Très probablement, le conteneur de db ne démarre pas.

Assurez-vous que cela fonctionne correctement en démarrant uniquement le service de db . Vous pouvez le faire avec la commande suivante:

 docker-compose up db 

S’il apparaît que le service MySQL ne fonctionne pas après cette commande, vous avez trouvé l’origine de votre problème.

Non spécifiquement lié à MySQL, mais plus le message ERROR: for Cannot link to a non running container: /b2f21b869ccc__1 AS /_1/_1

J’ai trouvé que le conteneur de dépendance avait un identifiant différent de celui donné ( b2f21b869ccc dans mon exemple ci-dessus)

Résolu simplement en exécutant docker-compose up -d --force-recreate

ce qui l’a amené à recréer la dépendance et à corriger le lien vers le bon identifiant de docker

Pour moi, cela n’a pas aidé docker-compos up db.

Cela a fait le tour pour moi:

sudo service docker restart

et puis continuer avec docker-composer up (-d)

Vous pouvez essayer les nouvelles fonctionnalités du réseau docker. Pour ce faire, vous devez supprimer le paramètre link dans votre docker-compose.yml et initialiser le conteneur avec l’ --x-networking option .

 docker-compose --x-networking up -d 

Pour empêcher Docker de générer des noms aléatoires pour les conteneurs, qui sont ajoutés au fichier / etc / hosts du réseau respectif pour chaque conteneur, vous pouvez utiliser le nom du container_name: clé dans le fichier docker-compose.yml

 db: container_name: db image: mysql:latest environment: MYSQL_DATABASE: app_development MYSQL_USER: mysql DATABASE_PASSWORD: onetwo ROOT_PASSWORD: onetwo web: container_name: web build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - "4000:3000" 

Problème:

  • J’ai eu cette erreur à chaque fois que docker-compose réussi à créer un ensemble d’ Images , mais une de ces Images ne parvient pas à s’exécuter (par exemple, lancer dans son propre Container ).

  • Dans ce cas, je pense que l’ Image sous-jacente à votre Container puma_db_1 ne run . Vous pouvez trouver le nom de cette Image en exécutant docker ps -a . Cela dit, son nom est probablement puma_db

Solution:

  • Pour obtenir la cause, vous pouvez essayer docker-compose up ou docker-compose up db

  • Sinon, je trouve le message d’erreur en exécutant docker run plus utile. Dans ce cas, ce serait docker run puma_db

J’ai eu le même problème avec mssql.link , car je n’utilise pas de firebase database locale (plutôt que celle que nous avons sur le staging), il me suffisait de commenter cette ligne en éditant le script Dockerfile:

 # DOCKER_ARGS="${DOCKER_ARGS} --link mssql-server-linux:mssql.link" 

Cette solution peut aider quelqu’un ou peut-être personne, mais elle l’a sortingée 🙂

Si vous avez démarré le conteneur, lets say X avec un lien --link keen_visvesvaraya , puis une fois que X est --link keen_visvesvaraya , le conteneur lié a été arrêté, mais X continué à fonctionner. Maintenant, si vous essayez d’ docker exec dans X vous obtenez cette erreur.

La solution de Yah est de redémarrer.

J’ai eu le même problème avec elasticsearch – symfony – et docker

 Can not link to a non-running container:/43c1d3b410db_myindex_elasticsearch_1 AS /myindex_apache_1/elasticsearch 

la solution consiste à supprimer le contenu du volume de données

elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:5.5.2 Volumes: - ./docker/volume/elasticsearch: /usr/share/elasticsearch/data et lancez docker-composer up -d nouveau.