【问题标题】:docker-compose links between app and dbdocker-compose 应用程序和数据库之间的链接
【发布时间】:2016-05-21 11:14:19
【问题描述】:

我在重新升级 docker-compose 链接时遇到问题。 我正在尝试在 ruby​​ rack 应用程序和 mysql 之间进行链接,并解析 db 主机名。

docker-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>'

码头信息:

 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 关于链接的文档,它说链接指令添加了相关容器的 DNS 记录,但它对我不起作用。

有什么想法吗?

【问题讨论】:

    标签: mysql ruby docker docker-compose


    【解决方案1】:

    在 docker-compose v2 中,您不需要链接。所有容器都将在一个公共网络 (read more) 中创建。通过下一个配置,您可以通过名称解析服务:

    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 有问题。 Сoncretely 与下一行:

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

    你应该明白这个命令是在镜像构建阶段执行的。在这个阶段你没有db名字的服务。 db 服务仅在图像雪构建后出现。 depends_on option doc 仅说明服务启动的顺序,而没有说明构建顺序。

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

    【讨论】:

    • 它没有帮助,我仍然得到同样的错误:Mysql2::Error: Unknown MySQL server host 'db' (2)
    • 是的,我之前试图发布我发现我的问题,但 stackoverflow 没有让我:) 无论如何,你是对的,这就是问题.. 我太新手了 :) 10x
    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    相关资源
    最近更新 更多