2015-08-21 16 views
42

Ho bisogno di creare rails e contenitori mysql con docker-compose. Quando cerco di creare collegamenti tra i contenitori con docker-compose up, ottengoDocker Impossibile collegarsi a un contenitore non funzionante

Cannot start container 9b271c58cf6aecaf017dadaf5b Cannot link to a non running container: /puma_db_1 AS /puma_web_1/db

file

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"] 

finestra mobile-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 
+3

molto probabilmente il contenitore 'db' non riesce a iniziare. Che cosa fa 'dars' componi la finestra mobile? il servizio mysql è valido in questo caso? Fornisci inoltre nella tua domanda l'output 'docker-compose up ' – Thomasleveil

+0

@Thomasleveil grazie !! con 'docker-compose up db' ho ottenuto' errore: il database non è inizializzato e MYSQL_ROOT_PASSWORD non è impostato su ' – kalelc

+0

ok, ho fatto una risposta quindi – Thomasleveil

risposta

57

Molto probabilmente il contenitore db non viene avviato.

Assicurarsi che funzioni correttamente avviando solo il servizio db. Potete farlo con il seguente comando:

docker-compose up db 

Se appare il servizio MySQL non è in esecuzione dopo questo comando, allora avete trovato l'origine del problema.

+1

Questo sta puntando nella giusta direzione. Normalmente lo vedresti se un container collegato non si avvia. È interessante notare che il messaggio di errore non me lo dice. –

5

si potrebbe provare le nuove funzionalità di networking finestra mobile, per fare questo, è necessario rimuovere il parametro collegamento nel vostro finestra mobile-compose.yml, e inizializzare il contenitore con il --x-networking option.

docker-compose --x-networking up -d 

Per evitare finestra mobile generare nomi casuali per i contenitori, che vengono aggiunti ai padroni di casa file di /etc/della rispettiva rete per ogni contenitore, è possibile utilizzare il tasto container_name: nella finestra mobile-composizione. 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" 
26

Non specificamente legato a MySQL, ma più il messaggio ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1

ho trovato che la conta delle dipendenze iner aveva un id diverso da quello determinato (b2f21b869ccc nel mio esempio sopra)

risolto semplicemente eseguendo docker-compose up -d --force-recreate <service>

che ha causato per ricreare la dipendenza e riparare il link alla corretta finestra mobile id

+1

Ho finito per fare 'docker-compose rm' che rimuove anche tutti i contenitori. Immagino che l'esecuzione di 'docker rm CONTAINER_ID' sostituendo l'id del contenitore in questione dovrebbe anche fare il trucco. – Ian

+0

Grazie mille. Questo è stato un risparmiatore di vita. –

15

Per quanto mi riguarda, non ha aiutato l'esecuzione di docker-comporre up db.

Questo ha fatto il trucco per me:

sudo service docker restart

e poi continuare con finestra mobile-up comporre (-d)

+0

Questo ha funzionato anche per me, probabilmente perché avevo appena installato il motore mobile e non avevo riavviato il server. Anche se il motore di docker sembrava funzionare, il riavvio apparentemente risolveva alcuni problemi. – Kryten

0

Problema:

  • ho ottenuto questo errore ogni volta che docker-compose con successo crea un set di Images, ma uno di quelli Images non riesce a eseguire (ad es. lancio nel proprio Container).

  • In questo caso, ho il sospetto che il Image, sottostante il tuo puma_db_1Container, non riesce a run. Puoi trovare il nome di questo Image eseguendo docker ps -a. Detto questo, il suo nome è più probabile puma_db

Soluzione:

  • Per arrivare alla causa, si può provare docker-compose up <service_name> o docker-compose up db

  • In alternativa, trovo il messaggio di errore in esecuzione docker run <image_name> più utile. In questo caso, sarebbe docker run puma_db

0

Ho avuto lo stesso problema per mssql.link, come io non sto usando database locale (piuttosto utilizzando quello che abbiamo sulla messa in scena), tutto quello che dovevo fare è solo commentare che linea fuori modificando lo script Dockerfile:

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

Questa soluzione può aiutare qualcuno o può essere nessuno, ma si è occupata per me :)

Problemi correlati