Je dois créer des conteneurs Rails et Mysql avec docker-compose. Lorsque j'essaie de créer des liens entre les conteneurs avec docker-compose up
, je reçois
Impossible de démarrer le conteneur 9b271c58cf6aecaf017dadaf5b Lien impossible vers un conteneur non en cours d'exécution: /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
Il est fort probable que le conteneur db
ne démarre pas.
Assurez-vous qu'il fonctionne correctement en démarrant uniquement le service 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.
Pas spécifiquement lié à MySQL mais plus au message ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1
J'ai trouvé que le conteneur de dépendance avait un identifiant différent de celui indiqué (b2f21b869ccc
dans mon exemple ci-dessus)
Résolu simplement en exécutant
docker-compose up -d --force-recreate <service>
ce qui l’a amené à recréer la dépendance et à corriger le lien vers le bon identifiant de menu fixe
Pour moi, cela n’a pas aidé à exécuter docker-compose up db.
Cela a fait le tour pour moi:
Sudo service docker restart
puis continuer avec docker-compose up (-d)
Vous pouvez essayer les nouvelles fonctionnalités du réseau Docker. Pour ce faire, vous devez supprimer le paramètre link de votre docker-compose.yml et initialiser le conteneur avec le --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 la clé container_name:
dans le 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"
J'ai eu le même problème pour mssql.link
, étant donné que je n'utilise pas de base de données locale (j'utilise plutôt celle que nous avons en staging), tout ce que j'avais à faire est simplement 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 ne pas être quelqu'un, mais elle l'a triée pour moi :)
Problème:
J'ai eu cette erreur chaque fois que docker-compose
réussissait Construit un ensemble de Images
, mais l'un de ces Images
échoue àrun (par exemple, lance son propre Container
).
Dans ce cas, je soupçonne que la Image
, sous-jacente à votre puma_db_1
Container
, échoue à run
. Vous pouvez .__ trouver le nom de cette Image
en exécutant docker ps -a
. Cela dit, son nom est très probablement puma_db
Solution:
Pour obtenir la cause, vous pouvez essayer docker-compose up
<service_name>
ou docker-compose up db
Alternativement, je trouve le message d'erreur en exécutant docker run
<image_name>
plus utile. Dans ce cas, ce serait docker
run puma_db
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 exécutez à nouveau docker-composer up -d
.
Si vous avez démarré le conteneur lets say X
avec un lien --link keen_visvesvaraya
, puis une fois que X
est terminé, le conteneur lié a été arrêté, mais X
a continué à s'exécuter. Maintenant, si vous essayez de docker exec
dans X
, vous obtenez cette erreur.
La solution est de recommencer.