2015-08-21 13 views
42

Potrzebuję utworzyć szyny i kontenery mysql z funkcją dokowania. Kiedy próbuję tworzyć połączenia pomiędzy pojemnikami z docker-compose up, mamDocker Nie można utworzyć łącza do niedziałającego kontenera

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

Pliki

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

doker-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

najprawdopodobniej 'db' pojemnik nie daje się uruchomić. Co robi 'docker-compose up db'? czy w tym przypadku usługa mysql jest w porządku? Podaj także w swoim pytaniu wyjście "docker-compose up" – Thomasleveil

+0

@Thomasleveil thanks !! z '' docker-compose up db' otrzymuję 'error: baza danych nie jest zainicjalizowana i MYSQL_ROOT_PASSWORD nie jest ustawiony' – kalelc

+0

w porządku, zrobiłem to odpowiedź następnie – Thomasleveil

Odpowiedz

57

Najprawdopodobniej kontener db nie uruchamia się.

Upewnij się, że działa poprawnie, uruchamiając tylko usługę db. Można to zrobić za pomocą następującego polecenia:

docker-compose up db 

Jeśli wydaje się, że usługa nie jest uruchomiona MySQL po tej komendzie, potem okazało się, że pochodzenie problemu.

+1

To wskazuje we właściwym kierunku. Zwykle zobaczysz to, jeśli połączony kontener nie uruchomi się. Co ciekawe, komunikat o błędzie mi tego nie mówi. –

5

Możecie wypróbować nowe funkcje Döcker sieci, Aby to zrobić, należy usunąć łącza parametr w Döcker-compose.yml i zainicjować pojemnik z --x-networking option.

docker-compose --x-networking up -d 

Aby zapobiec docker generowania losowych nazw dla kontenerów, które są dodawane do gospodarzy pliku /etc/odpowiedniej sieci dla każdego kontenera, można użyć klucza w Docker-Compose container_name:. 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

Nie specyficznie związane z MySQL, ale więcej wiadomości ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1

Okazało się, że w zależności Conta iner miał inny identyfikator niż jednej danej (b2f21b869ccc w moim przykładzie powyżej)

rozwiązać po prostu przez uruchomienie docker-compose up -d --force-recreate <service>

który spowodował go odtworzyć zależność i naprawić link do właściwej Döcker id

+1

Skończyło się na zrobieniu 'docker-compose rm', które również usuwa wszystkie kontenery. Domyślam się, że uruchomienie 'docker rm CONTAINER_ID', zastępując nieprawidłowy identyfikator kontenera, powinno również wystarczyć. – Ian

+0

Wielkie dzięki. To był ratownik życia. –

15

Dla mnie nie pomogło to w uruchomieniu db-do-komponowania db.

To załatwiło sprawę dla mnie:

sudo service docker restart

a następnie kontynuowanie Döcker-komponować się (-D)

+0

To również działało dla mnie, prawdopodobnie dlatego, że właśnie zainstalowałem silnik dokowania i nie zrestartowałem serwera. Mimo że silnik w doku zdawał się działać, ponowne uruchomienie najwyraźniej naprawiło jakiś problem. – Kryten

0

Problem:

  • Dostałem ten błąd po pomyślnym utworzeniu zestawu docker-compose zestaw Images, ale jeden z tych Images nie można wykonać ( ) (np. uruchom na własny Container).

  • W tym przypadku podejrzewam Image, podkreślając swój puma_db_1Container, nie udaje się run. Możesz znaleźć nazwę tego Image, uruchamiając docker ps -a. Powiedział, że jego nazwa jest najprawdopodobniej puma_db

Rozwiązanie:

  • Aby dostać się do sprawy, można spróbować docker-compose up <service_name> lub docker-compose up db

  • Alternatywnie, znajdę się komunikat o błędzie uruchamianie docker run <image_name> bardziej przydatne. W tym przypadku, to byłoby docker run puma_db

0

miałem ten sam problem dla mssql.link, jak nie używam lokalnej bazy danych (raczej za pomocą jednego mamy na postoju), wszystko, co musiałem zrobić, to tylko komentarz, że line out edytując skrypt Dockerfile:

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

to rozwiązanie może komuś pomóc lub może być nikt, ale posortowane to dla mnie :)

Powiązane problemy