我有一个生活在码头的laravel应用程序,我想把elasticsearch集成到我的应用程序中,这就是我的docker-compose.yaml看起来的样子。
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:我运行docker-compose up -d,然后遇到非常奇怪的问题,如果我在laravel容器中执行curl localhost:9200,它会返回这个消息Failed to connect to localhost port 9200: Connection refused,但是如果我从码头运行curl localhost:9200,它会返回预期的响应。
也许我不明白这是怎么回事,希望有人能帮我
发布于 2020-12-28 07:06:01
当您想要访问某个容器中的另一个容器时,应该使用容器名称,而不是localhost。
如果您在laravel中并且希望访问Elasticsearch,您应该:
curl es:9200由于您将9200端口映射到localhost (docker中的ports部分),所以这个端口也可以从本地机器上获得,这就是为什么从本地机器卷到9200工作的原因。
https://stackoverflow.com/questions/65473572
复制相似问题