【问题标题】:Docker Rails app with searchkick/elasticsearch带有 searchkick/elasticsearch 的 Docker Rails 应用程序
【发布时间】:2016-08-13 13:17:17
【问题描述】:

我将我的 rails 应用程序从本地机器移植到 docker 容器中,并遇到了 elasticsearch/searchkick 问题。我可以让它暂时工作,但我想知道是否有更好的方法。因此,基本上弹性搜索的端口与 searchkick 使用的默认 localhost:9200 不匹配。现在我在 elasticsearch 容器上使用了“docker inspect”并获得了实际的 IP,然后像 searchkick 文档所说的那样设置 ENV['ELASTICSEARCH_URL'] 变量,它就可以工作了。我遇到的问题是,如果我重新启动/更改 IP 有时会更改的容器并且我必须再次完成整个过程,那将是一个痛苦。这是我的 docker-compose.yml:

version: '2'
services:
  web:
    build: .
    command: rails server -p 3000 -b '0.0.0.0'
    volumes:
      - .:/living-recipe
    ports:
      - '3000:3000'
    env_file:
      - .env
    depends_on:
      - postgres
      - elasticsearch

  postgres:
    image: postgres

  elasticsearch:
    image: elasticsearch

【问题讨论】:

    标签: ruby-on-rails elasticsearch docker-compose


    【解决方案1】:

    使用elasticsearch:9200 而不是localhost:9200。 docker compose 通过其名称公开容器。

    【讨论】:

    • 抱歉点击了赞成票而不是接受答案
    • 说明不清楚。 elasticsearch:9200 应该在哪里使用?它应该替换任何行还是添加到某处或什么?
    • 我相信他的意思是在web下的depends_on:部分
    【解决方案2】:

    您不想尝试手动映射elasticsearch 的 IP 地址,因为它会改变。

    depends_on 替换为links。这将创建相同的依赖关系,但也允许通过服务名称访问容器。

    链接服务的容器可以通过与别名相同的主机名访问,或者如果没有指定别名,则使用服务名。

    链接也像depends_on一样表达服务之间的依赖关系,因此它们决定了服务启动的顺序。

    Docker Compose File Reference - Links

    然后在您设置ENV['ELASTICSEARCH_URL'] 的rails 应用程序中,改用elasticsearch

    【讨论】:

      【解决方案3】:

      这是为我工作的 docker-compose.yml

      docker compose 会暴露容器的名字,所以你可以设置 ELASTICSEARCH_URL: http://elasticsearch:9200 Rails 应用程序容器中的 ENV 变量

      version: "3"
      services:
        db:
          image: postgres:9.6
          restart: always
          volumes:
            - /tmp/db:/var/lib/postgresql/data
          environment:
            POSTGRES_PASSWORD: password
        elasticsearch:
          image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
          volumes:
            - .:/app
          ports:
            - 9200:9200
          environment:
            - discovery.type=single-node
          ulimits:
            memlock:
              soft: -1
              hard: -1
        api:
          build: .
          command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
          volumes:
            - ".:/app"
          ports:
            - "3001:3000"
          depends_on:
            - db
          environment:
            DB_HOST: db
            DB_PASSWORD: password
            ELASTICSEARCH_URL: http://elasticsearch:9200
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2014-12-24
        • 2014-11-30
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        相关资源
        最近更新 更多