2015-08-21 27 views
42

Tôi cần tạo đường ray và vùng chứa mysql với docker-compose. Khi tôi cố gắng tạo ra mối liên hệ giữa container với docker-compose up, tôi nhận đượcDocker Không thể liên kết đến một thùng chứa không hoạt động

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

tập tin

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

nhiều khả năng 'chứa db' thất bại để bắt đầu. 'Docker-compose up db' làm gì? là dịch vụ mysql tốt trong trường hợp đó? Ngoài ra cung cấp trong câu hỏi của bạn đầu ra 'docker-compose up' – Thomasleveil

+0

@Thomasleveil thanks !! với 'docker-compose up db' tôi nhận được' lỗi: cơ sở dữ liệu là uninitialized và MYSQL_ROOT_PASSWORD không được thiết lập ' – kalelc

+0

alright, tôi đã làm cho nó một câu trả lời sau đó – Thomasleveil

Trả lời

57

Rất có thể hộp chứa db không khởi động được.

Đảm bảo nó hoạt động tốt bằng cách chỉ bắt đầu dịch vụ db. Bạn có thể thực hiện điều đó bằng lệnh sau:

docker-compose up db 

Nếu dịch vụ MySQL không chạy sau lệnh này thì bạn đã tìm thấy nguyên nhân của sự cố.

+1

Điều này đang chỉ đúng hướng. Thông thường, bạn sẽ thấy điều này nếu vùng chứa được liên kết không bắt đầu. Thật thú vị, thông báo lỗi không cho tôi biết điều đó. –

5

Bạn có thể thử các tính năng mới của mạng Docker, Để làm điều này, bạn phải loại bỏ các liên kết tham số trong bạn Docker-compose.yml, và khởi container với --x-networking option.

docker-compose --x-networking up -d 

Để ngăn chặn Docker tạo tên ngẫu nhiên cho các container, được bổ sung vào /etc/hosts tập tin của mạng tương ứng cho mỗi container, bạn có thể sử dụng container_name: then chốt trong Docker-soạn. 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

Không cụ thể liên quan đến MySQL nhưng nhiều thông điệp ERROR: for <service> Cannot link to a non running container: /b2f21b869ccc_<dependency>_1 AS /<service>_1/<dependency>_1

tôi phát hiện ra rằng sự phụ thuộc conta iner đã có một id khác nhau so với cái nhất định (b2f21b869ccc trong ví dụ của tôi ở trên)

Giải Quyết đơn giản bằng cách chạy docker-compose up -d --force-recreate <service>

khiến nó để tái tạo sự phụ thuộc và sửa chữa các liên kết đến các Docker id đúng

+1

Tôi đã kết thúc làm 'docker-compose rm' cũng loại bỏ tất cả các vùng chứa. Tôi đoán chạy 'docker rm CONTAINER_ID' thay thế id vùng chứa vi phạm trong đó cũng nên thực hiện thủ thuật. – Ian

+0

Cảm ơn rất nhiều. Đây là một cuộc sống tiết kiệm. –

15

Đối với tôi, nó không giúp chạy docker-compose up db.

này đã làm các trick cho tôi:

sudo service docker restart

và sau đó tiếp tục với Docker-soạn lên (-d)

+0

Điều này cũng làm việc cho tôi, có lẽ vì tôi vừa mới cài đặt công cụ docker và chưa khởi động lại máy chủ. Mặc dù công cụ docker dường như đang hoạt động, nhưng việc khởi động lại dường như đã khắc phục được một số vấn đề. – Kryten

0

Vấn đề:

  • Tôi đã nhận lỗi này bất cứ khi nào docker-compose thành công xây dựng một bộ Images, nhưng một trong sốđókhông hoạt động chạy (ví dụ: khởi động vào Container riêng của nó).

  • Trong trường hợp này, tôi nghi ngờ Image, tiềm ẩn của bạn puma_db_1Container, đang thất bại trong việc run. Bạn có thể tìm tên này Image bằng cách chạy docker ps -a. Điều đó nói rằng, tên của nó là có khả năng nhất puma_db

Giải pháp:

  • Để có được nguyên nhân, bạn có thể thử docker-compose up <service_name> hoặc docker-compose up db

  • Ngoài ra, tôi thấy thông báo lỗi bằng chạy docker run <image_name> hữu ích hơn. Trong trường hợp này, đó sẽ là docker run puma_db

0

tôi đã cùng một vấn đề cho mssql.link, như tôi không sử dụng cơ sở dữ liệu địa phương (chứ không phải bằng cách sử dụng một trong chúng ta có trên dàn), tất cả tôi phải làm là chỉ cần nhận xét rằng dòng ra bằng cách chỉnh sửa Dockerfile kịch bản:

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

giải pháp này có thể giúp một người nào đó hoặc có thể là không có ai, nhưng nó được sắp xếp nó cho tôi :)

Các vấn đề liên quan