我正在尝试使用
laravel
容器化我的应用程序 docker
。为此,我有一个 Dockerfile
FROM php:8.1-fpm
RUN set -eux; \
apt-get update; \
apt-get upgrade -y; \
apt-get install -y --no-install-recommends \
curl \
libmemcached-dev \
libz-dev \
libpq-dev \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
libssl-dev \
libwebp-dev \
libxpm-dev \
libmcrypt-dev \
libonig-dev; \
rm -rf /var/lib/apt/lists/*
RUN set -eux; \
# Install the PHP pdo_mysql extention
docker-php-ext-install pdo_mysql; \
# Install the PHP pdo_pgsql extention
docker-php-ext-install pdo_pgsql; \
# Install the PHP gd library
docker-php-ext-configure gd \
--prefix=/usr \
--with-jpeg \
--with-webp \
--with-xpm \
--with-freetype; \
docker-php-ext-install gd; \
php -r 'var_dump(gd_info());'
docker-compose.yml
:
version: "3.7"
services:
app:
build:
args:
user: root
uid: 1000
context: ./
dockerfile: Dockerfile
image: purolink_local
container_name: purolink_local_container
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- purolink_local_nets
# DB SERVER
mysql:
image: mysql:latest
container_name: purolink_mysql_server
ports:
- 3306:3306
expose:
- "3306"
cap_add:
- SYS_NICE # CAP_SYS_NICE
volumes:
- dbdata:/var/lib/mysql # Map MySQL data directory into the container
env_file:
- .env
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_USER: toor
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
restart: unless-stopped
networks:
- purolink_local_nets
# PHPMYADMIN
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma
links:
- mysql
environment:
PMA_HOST: 127.0.0.1
PMA_PORT: 3306
PMA_ARBITRARY: 1
UPLOAD_LIMIT: 100000000
restart: always
ports:
- 8081:80
networks:
- purolink_local_nets
#NGINX SERVER
nginx:
image: nginx:alpine
# platform: linux/arm64/v8
container_name: purolink_local
restart: unless-stopped
tty: true
ports:
- "8000:80"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- purolink_local_nets
#Redis Service
redis:
image: redis:latest
# platform: linux/arm64/v8
container_name: purolink_redis
command: redis-server --appendonly yes --requirepass "${REDIS_PASSWORD}"
ports:
- "6380:6379"
#Queue Service
queue:
build:
context: .
args:
- APP_ENV=${APP_ENV}
environment:
- APP_ENV=${APP_ENV}
- CONTAINER_ROLE=queue
container_name: purolink_local_queue
working_dir: /var/www
volumes:
- ./:/var/www
#Docker Networks
networks:
purolink_local_nets:
name: purolink_local_nets
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
但是当我尝试访问我的应用程序上的部分时,返回
500 error
并在日志中,我收到任何带有以下文本的消息:
PDOException: PDO::__construct(): php_network_getaddresses: getaddrinfo for purolink_mysql_server failed: Name or service not known
这很奇怪,因为它运行其他部分,但在日志中出现此消息。
在我的
.env
中,我有:
DB_CONNECTION=mysql
DB_HOST=purolink_mysql_server
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=user
DB_PASSWORD=pass
我可以在我的应用程序中登录,我可以显示许多带有数据的部分,但具体来说,一个部分,返回错误 500 并显示此消息。
在我的环境中
PRE
和PRO
一切都好,我认为我的docker有错误。
任何人都可以帮助我吗?
抱歉我的英语不好
您的
DB_HOST
环境应该是mysql
,服务的名称,而不是容器名称