当我运行php artisan migrate
时,似乎我的php容器无法解析数据库容器的主机“ db”,我想知道我是否在配置中设置了错误。
试图弄混dockerfile上的depends_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
provision / 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
答案 0 :(得分:0)
您丢失了
links:
- db
在您的php
配置中。
无论如何,就像@David Maze提到的那样,在Dockerfile中运行php artisan migrate
不仅是一种不好的做法,而且也不起作用。
仅应在启动容器时运行该命令。考虑一下,php artisan migrate
将修改另一个容器的数据,这不能保证它在构建映像时正在运行。这违反了容器哲学。