Docker化Rails应用连接Elasticsearch失败求助
Docker化Rails应用连接Elasticsearch失败问题
按照教程在Docker化Rails应用中添加Elasticsearch实例,执行docker-compose build && docker-compose up无报错,但应用内调用Elasticsearch时出现以下错误:
Faraday::ConnectionFailed (Failed to open TCP connection to cap_es:9200 (getaddrinfo: Try again))
getaddrinfo: Try again
- 尝试设置直接主机地址
ELASTICSEARCH_URL=http://127.0.0.1:9200,得到错误:
Connection refused - connect(2) for "127.0.0.1" port 9200
- 测试不同Ruby版本的情况:
- 使用3.1.2时,先遇到SSL错误:
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 peeraddr=104.26.1.143:443 state=error: certificate verify failed (unable to get local issuer certificate))- 使用3.1.2-alpine时,出现类似的域名解析错误:
getaddrinfo: name resolution is temporary unavailable - 执行数据库seed时,同样出现连接错误:
Caused by: SocketError: Failed to open TCP connection to cap_es:9200 (getaddrinfo: Try again)
配置文件
docker-compose.yml
# docker-compose.yml version: '3' networks: development: test: volumes: db_data: es_data: gem_cache: shared_data: services: cap_redis: image: redis:7.0.5-alpine command: redis-server networks: - development - test volumes: - shared_data:/usr/share/redis cap_db: image: postgres:14.5-alpine container_name: cap_db volumes: - db_data:/var/lib/postgresql/data - shared_data:/usr/share networks: - development - test environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password ports: - 5432:5432 cap_es: image: elasticsearch:8.4.2 environment: - node.name=es01 - cluster.initial_master_nodes=es01 - cluster.name=cap_elastic_cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - xpack.security.enabled=false - xpack.monitoring.templates.enabled=false - xpack.graph.enabled=false - xpack.watcher.enabled=false ulimits: memlock: soft: -1 hard: -1 volumes: - es_data:/usr/share/elasticsearch/data ports: - 9200:9200 cap_app: build: context: . dockerfile: Dockerfile.dev container_name: cap_app volumes: - .:/var/app - shared_data:/usr/share - gem_cache:/usr/local/bundle/gems networks: - development ports: - 3000:3000 stdin_open: true tty: true env_file: .env.development entrypoint: dev-entrypoint.sh command: [ 'bundle', 'exec', 'rails', 'server', '-p', '3000', '-b', '0.0.0.0' ] environment: RAILS_ENV: development depends_on: - cap_db - cap_es cap_test: image: cap_cap_app container_name: cap_test volumes: - .:/var/app - shared_data:/usr/share - gem_cache:/usr/local/bundle/gems networks: - test ports: - 3001:3000 stdin_open: true tty: true env_file: .env.development entrypoint: test-entrypoint.sh command: [ 'bundle', 'exec', 'rails', '-v' ] environment: RAILS_ENV: test depends_on: - cap_db - cap_es guard: build: context: . dockerfile: Dockerfile.dev volumes: - .:/var/app - gem_cache:/usr/local/bundle/gems environment: RAILS_ENV: development command: [ 'bundle', 'exec', 'guard', '--no-bundler-warning', '--no-interactions' ] depends_on: - cap_app
Dockerfile.dev
# Dockerfile.dev FROM ruby:3.1.2-alpine ENV APP_PATH /var/app ENV BUNDLE_VERSION 2.2.3 ENV BUNDLE_PATH /usr/local/bundle/gems ENV TMP_PATH /tmp ENV RAILS_LOG_TO_STDOUT true ENV RAILS_PORT 3000 # Copy entrypoint scripts and grant execution permissions COPY ./dev-docker-entrypoint.sh /usr/local/bin/dev-entrypoint.sh COPY ./test-docker-entrypoint.sh /usr/local/bin/test-entrypoint.sh RUN chmod +x /usr/local/bin/dev-entrypoint.sh && chmod +x /usr/local/bin/test-entrypoint.sh # Install dependencies RUN apk -U add --update --no-cache \ build-base \ git \ libpq-dev \ less \ nodejs \ postgresql-dev \ postgresql-client \ libxml2-dev \ libxslt-dev \ tzdata \ yarn \ && rm -rf /var/cache/apk/* \ && mkdir -p $APP_PATH # Install bundler and clean cache RUN gem install bundler --version "$BUNDLE_VERSION" \ && rm -rf $GEM_HOME/cache/* WORKDIR $APP_PATH EXPOSE $RAILS_PORT # ENTRYPOINT [ 'bundle', 'exec' ]
内容的提问来源于stack exchange,提问作者A2p0
相关产品推荐
相关产品推荐

