泊坞窗 – 组合应用程序和数据库之间的链接

我有一个问题regradingdocker组成的链接。 我试图链接一个ruby机架应用程序和MySQL,并解决数据库主机名称。

泊坞窗,compose.yml:

version: '2' services: db: image: library/mysql:5.6.22 environment: MYSQL_ROOT_PASSWORD: xxx MYSQL_DATABASE: xxx MYSQL_USER: xxx MYSQL_PASSWORD: xxx ports: - "3306:3306" restart: always snow: build: . links: - db depends_on: - db ports: - "9292:9292" restart: always 

雪的Dockerfile:

 # Docker file for CentOS with RVM FROM centos:centos7 MAINTAINER "XXXXX" RUN useradd -ms /bin/bash t_user RUN echo "t_user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers WORKDIR "/home/t_user" RUN yum -y install curl which tar sudo wget git vim mysql-devel USER t_user ## Install RVM + ruby 2.1.2 RUN gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 RUN curl -sSL https://get.rvm.io | bash -s stable ENV PATH /usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin RUN /bin/bash -l -c "rvm requirements" RUN /bin/bash -l -c "rvm install ruby-2.1.2" RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" # Copy snow USER t_user WORKDIR /tmp ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN /bin/bash -l -c "bundle" WORKDIR "/home/t_user" RUN mkdir -p snow/current/ && mkdir -p snow/shared/config/ COPY . /home/t_user/snow/current/ RUN rm /home/t_user/snow/current/Dockerfile USER root RUN chown -R t_user.t_user snow/ USER trusteer WORKDIR /home/t_user/snow/current/ RUN /bin/bash -l -c "rake db:migrate" RUN chmod +x ./bin/runner ENTRYPOINT ["./bin/snow"] EXPOSE 9292 

我尝试运行docker-compose up -d后得到的错误是:

 rake aborted! Mysql2::Error: Unknown MySQL server host 'db' (2) /home/trusteer/.rvm/gems/ruby-2.1.2/gems/mysql2-0.4.4/lib/mysql2/client.rb:87:in `connect' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/mysql2-0.4.4/lib/mysql2/client.rb:87:in `initialize' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `new' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `mysql2_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:438:in `new_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:448:in `checkout_new_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:422:in `acquire_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:348:in `checkout' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:263:in `block in connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:262:in `connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:571:in `retrieve_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_handling.rb:113:in `retrieve_connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/connection_handling.rb:87:in `connection' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/migration.rb:916:in `initialize' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/migration.rb:823:in `new' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/migration.rb:823:in `up' /home/trusteer/.rvm/gems/ruby-2.1.2/gems/activerecord-4.2.6/lib/active_record/migration.rb:801:in `migrate' /home/trusteer/snow/current/Rakefile:10:in `block (2 levels) in <top (required)>' /home/trusteer/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `eval' /home/trusteer/.rvm/gems/ruby-2.1.2/bin/ruby_executable_hooks:15:in `<main>' 

docker信息:

  Containers: 2 Running: 1 Paused: 0 Stopped: 1 Images: 72 Server Version: 1.11.0 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 110 Dirperm1 Supported: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge null host Kernel Version: 3.13.0-58-generic Operating System: Ubuntu 14.04.4 LTS OSType: linux Architecture: x86_64 CPUs: 4 Total Memory: 7.507 GiB Name: galt-tp ID: DKCR:ZB6N:PW4O:76PF:UZPU:HVZO:XHL4:SRPM:6ACQ:M6T5:AZXN:KVPQ Docker Root Dir: /var/lib/docker Debug mode (client): false Debug mode (server): false Registry: https://index.docker.io/v1/ WARNING: No swap limit support 

我有docker关于链接的文档,它说,链接指令添加相关容器的DNSlogging,但它不适用于我。

任何想法 ?

在docker-compose v2中,你不需要链接。 所有的容器将在一个共同的networking中创build( 阅读更多 )。 在下一个configuration中,您可以通过名称来parsing服务:

 version: '2' services: db: image: library/mysql:5.6.22 environment: MYSQL_ROOT_PASSWORD: xxx MYSQL_DATABASE: xxx MYSQL_USER: xxx MYSQL_PASSWORD: xxx ports: - "3306:3306" restart: always snow: build: . depends_on: - db ports: - "9292:9292" restart: always 

例如,您可以从雪中ping db容器:

 ping db 

更新

你的snow dockerfile有问题。 与下一行连续一致:

 RUN /bin/bash -l -c "rake db:migrate" 

你应该明白,这个命令是在图像构build阶段执行的。 而在这个阶段,你没有服务与db名称。 db服务只有在图像雪被build立后才会出现。 depends_on选项文档只说服务的顺序开始,没有关于build立顺序。

作为解决scheme,您可以使用此命令创buildbash脚本并在您的dockerfile入口点上执行它。