Ton*_*ala 9 php mysql dns laravel docker
当我运行时,我的 php 容器似乎无法解析数据库容器的主机“db” php artisan migrate,我想知道我是否在配置中设置了错误。
尝试弄乱 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
Run Code Online (Sandbox Code Playgroud)
规定/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"]
Run Code Online (Sandbox Code Playgroud)
数据库docker
FROM mariadb:latest
CMD ["mysqld", "--user=mysql"]
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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
Run Code Online (Sandbox Code Playgroud)
You are missing
links:
- db
Run Code Online (Sandbox Code Playgroud)
in your php configuration.
Anyway as @David Maze mentioned, running php artisan migrate in a Dockerfile is not only a bad practice, but it will not work.
You should run that command only when your containers are started. Think about it, php artisan migrate will modify another container's data, which is not guaranteed it is running at the time the image is being built. That is against the container philosophy.
| 归档时间: |
|
| 查看次数: |
25867 次 |
| 最近记录: |