gpt4 book ai didi

php - 使用 docker-compose 构建容器时出现 "php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution"错误

转载 作者:行者123 更新时间:2023-11-29 15:57:21 28 4
gpt4 key购买 nike

当我运行 php artisan migrate 时,我的 php 容器似乎无法解析数据库容器的主机“db” ,我想知道我的配置是否设置错误。

尝试弄乱 dockerfile 上的 dependent_on: 和 links: 选项。

docker-compose.yml

version: '3.3'

services:
db:
container_name: tasks-db
image: mariadb:latest
volumes:
- dbdata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=tasks
- MYSQL_USER=root
- MYSQL_PASSWORD=password
restart: always

webserver:
container_name: tasks-webserver
image: nginx:latest
ports:
- "8080:80"
- "443:443"
volumes:
- .:/app
- ./provision/nginx/:/etc/nginx/conf.d/
depends_on:
- php
restart: always

php:
container_name: tasks-php
build:
context: .
dockerfile: provision/php.docker
depends_on:
- db
restart: always
env_file:
- .env

volumes:
dbdata:
driver: local

配置/db.docker

FROM php:7.3-fpm

# Add dependencies
RUN apt-get update -y && apt-get install -y openssl libpng-dev libxml2-dev curl cron git libzip-dev zip unzip

# Install php extensions
RUN docker-php-ext-install pdo mbstring gd xml pdo_mysql zip

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY . /app/

WORKDIR /app

RUN chown -R $USER:www-data /app/storage
RUN chown -R $USER:www-data /app/bootstrap/cache

RUN chmod -R 775 /app/storage
RUN chmod -R 775 /app/bootstrap/cache

# Install composer dependencies
RUN composer install

RUN php artisan optimize

#RUN php artisan migrate --seed

RUN crontab -l | { cat; echo "* * * * * php /app/artisan schedule:run >> /dev/null 2>&1"; } | crontab -

STOPSIGNAL SIGTERM

CMD ["php-fpm"]

db.docker

FROM mariadb:latest

CMD ["mysqld", "--user=mysql"]

我收到此错误:

Step 13/16 : RUN php artisan migrate --no-interaction --seed
---> Running in ccbfcde9324d

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution (SQL: select * from information_schema.tables where table_schema = tasks and table_name = migrations and table_type = 'BASE TABLE')

at /app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|

Exception trace:

1 PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution")
/app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

2 PDO::__construct("mysql:host=db;port=3306;dbname=tasks", "root", "password", [])
/app/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

Please use the argument -v to see more details.
ERROR: Service 'php' failed to build: The command '/bin/sh -c php artisan migrate --no-interaction --seed' returned a non-zero code: 1

最佳答案

你失踪了

  links:
- db

在您的 php 配置中。

无论如何,正如 @David Maze 提到的,在 Dockerfile 中运行 php artisan migrate 不仅是一种不好的做法,而且是行不通的。

您应该仅在容器启动时运行该命令。想想看,php artisan migrate会修改另一个容器的数据,这并不能保证它在构建镜像时正在运行。这违背了容器哲学。

关于php - 使用 docker-compose 构建容器时出现 "php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382638/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com