这是我第一次使用docker所以很抱歉如果我犯了愚蠢的错误。我试图设置一个docker容器为laravel开发。这些是我的文件:
停靠文件:
FROM php:8-fpm
COPY . /app
WORKDIR /app
COPY composer.lock composer.json ./
RUN apt-get update -y && apt-get install -y sendmail libpng-dev
RUN apt-get update && apt-get install -y \
build-essential \
curl
RUN curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s \
gd \
zip
RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer update
RUN composer install
停靠-组合。yaml:
version: '3.9'
name: caas-portal
services:
front:
build:
context: ./webapp
target: builder
ports:
- 4200:4200
volumes:
- ./webapp:/project
- /project/node_modules
mysql:
container_name: mysql
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=db
ports:
- 3307:3306/tcp
networks:
- laravel
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.7
environment:
- discovery.type=single-node
ports:
- 9200:9200/tcp
- 9300:9300/tcp
volumes:
- 'elasticsearch:/usr/share/elasticsearch/data'
networks:
- laravel
app:
container_name: back
build: .
ports:
- 8000:80
networks:
- laravel
networks:
laravel:
driver: bridge
volumes:
elasticsearch:
driver: local
这是我的**.env的相关部分:**
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3307
DB_DATABASE=db
DB_USERNAME=root
DB_PASSWORD=password
当我运行docker exec -it <container> sh
并在shell中运行php artisan migrate
时,我得到以下错误:SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = db and table_name = migrations and table_type = 'BASE TABLE')
我看过类似的帖子,也试着按照给出的答案去做,但还是没有运气。错误在哪里,如何纠正?
1条答案
按热度按时间1qczuiv01#
在**.env中,尝试
DB_PORT=3306
。根据Networking in Compose上的Docker
注意
HOST_PORT
和CONTAINER_PORT
之间的区别是很重要的。[...]网络化的服务到服务通信使用CONTAINER_PORT
。如果我们将这个概念应用于docker-compose.yaml**,我们知道
mysql
服务有一个主机端口3307
,同时有一个容器端口3306
。现在,如果希望
app
服务连接到mysql
服务(服务到服务通信),那么在app
容器中,应该使用mysql
容器端口3306
进行连接,而不是3307
。