Vitaly Linevich
Vitaly Linevich

Reputation: 23

Want to run elasticsearch with Laravel app in docker, but it doesn't work

I have laravel app that lives in docker, and I want to integrate elasticsearch to my app That is how my docker-compose.yaml looks

version: '3'
services:
  laravel:
    build: ./docker/build
    container_name: laravel
    restart: unless-stopped
    privileged: true
    ports:
      - 8084:80
      - "22:22"
    volumes:
      - ./docker/settings:/settings
      - ../2agsapp:/var/www/html
      # - vendor:/var/www/html/vendor
      - ./docker/temp:/backup
      - composer_cache:/root/.composer/cache
    environment:
      - ENABLE_XDEBUG=true
    links:
      - mysql
  mysql:
    image: mariadb:10.2
    container_name: mysql
    volumes:
      - ./docker/db_config:/etc/mysql/conf.d
      - ./db:/var/lib/mysql
    ports:
      - "8989:3306"
    environment:
      - MYSQL_USER=dev
      - MYSQL_PASSWORD=dev
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=laravel
    command: --innodb_use_native_aio=0
  phpmyadmin:
    container_name: pma_laravel
    image: phpmyadmin/phpmyadmin:latest
    environment:
      - MYSQL_USER=dev
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_PASSWORD=dev
      - MYSQL_DATABASE=laravel
      - PMA_HOST=mysql
    ports:
      - 8083:80
    links:
      - mysql
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node

volumes:
  storage:
  composer_cache:

I run docker-compose up -d and then got really strange issue If I execute curl localhost:9200 inside laravel container it returns this message Failed to connect to localhost port 9200: Connection refused But if I wull run curl localhost:9200 out of the docker it returns expected response

Maybe I don't understand how it works, hope someone will help me

Upvotes: 2

Views: 1609

Answers (1)

ItayB
ItayB

Reputation: 11337

when you want to access another container within some container you should use the container name, not localhost.

If you are inside laravel and want to access Elasticsearch you should:

curl es:9200

Since you mapped the 9200 port to localhost (ports section in docker-compose) this port is available from your local machine as well, that's why curling from local machine to 9200 works.

Upvotes: 2

Related Questions