php - 如何解决此错误消息“找不到合适的服务器(`serverSelectionTryOnce` 集):[无法解析 'db'] 在 Lumen 上?
问题描述
当我从本地计算机运行此命令时:
docker-compose exec php php ../artisan migrate
我收到以下错误消息:
In functions.php line 431:
No suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve 'db']
本地机器上的环境代码结构如下:
.
+-- _images
| +-- _php
| +-- +-- _app
| +-- +-- composer.json
| +-- +-- Dockerfile
| +-- +-- .env
| +-- +-- _config/database.php
+-- docker-compose.yml
+-- Dockerfile
Dockerfile(根文件夹中的那个)代码:
FROM composer
RUN composer global require "laravel/lumen-installer"
ENV PATH $PATH:/tmp/vendor/bin
码头工人-compose.yml
version: '3.5'
services:
nginx:
build: images/nginx
command: nginx -g "daemon off;"
links:
- php
ports:
- "80:80"
volumes:
- ./images/php/app/public:/var/www/html/app/public
networks:
- db-net
php:
build: images/php
volumes:
- ./images/php:/var/www/html
working_dir: /var/www/html/app/public
command: php-fpm
links:
- db
- mongo
- cache
ports:
- "9000:9000"
environment:
APP_ENV: local
APP_DEBUG: 'true'
APP_KEY: SomeRandomKey!!!
APP_LOCALE: en
APP_FALLBACK_LOCALE: en
DB_CONNECTION: mysql
DB_HOST: db
DB_DATABASE: ${DB_DATABASE}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
MEMCACHED_HOST: cache
CACHE_DRIVER: memcached
networks:
- db-net
db:
image: mysql:8
command: --default-authentication-plugin=mysql_native_password # needed as of mysql 8
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USERNAME}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- db-net
cache:
image: memcached:1.6-alpine
networks:
- db-net
mongo:
image: "mongo:3-stretch"
container_name: mongodb-api
ports:
- "27017:27017"
networks:
- db-net
mongo-express:
image: "mongo-express:latest"
container_name: mongo-express-api
ports:
- "8081:8081"
networks:
- db-net
networks:
db-net:
external:
name: db_network
Dockerfile(php下的那个)
FROM php:7.2-fpm-alpine
# lumen packages
RUN docker-php-ext-install tokenizer mysqli pdo_mysql
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/main' >> /etc/apk/repositories
RUN echo 'http://dl-cdn.alpinelinux.org/alpine/v3.6/community' >> /etc/apk/repositories
RUN apk update
RUN apk add mongodb=3.4.4-r0
RUN mongo --version
# memcached
ENV MEMCACHED_DEPS zlib-dev libmemcached-dev cyrus-sasl-dev
RUN apk add --no-cache --update libmemcached-libs zlib
RUN set -xe \
&& apk add --no-cache --update --virtual .phpize-deps $PHPIZE_DEPS \
&& apk add --no-cache --update --virtual .memcached-deps $MEMCACHED_DEPS \
&& pecl install memcached \
&& echo "extension=memcached.so" > /usr/local/etc/php/conf.d/20_memcached.ini \
&& rm -rf /usr/share/php7 \
&& rm -rf /tmp/* \
&& apk del .memcached-deps .phpize-deps
# Installing PECL
RUN apk --no-cache add php7-pear php7-dev gcc musl-dev make
# xdebug - Should only run on local and dev enviorments
RUN apk add --no-cache $PHPIZE_DEPS \
&& pecl install xdebug-2.9.8 \
&& docker-php-ext-enable xdebug
# Install mongodb php lib via PECL and enable it in php.ini
RUN pecl install mongodb \
&& echo "extension=mongodb.so" > /usr/local/etc/php/conf.d/mongodb.ini
# Show the mongo db installed version
RUN php -i | grep mongo
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
数据库.php
<?php
return [
'default' => 'mongodb',
'connections' => [
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', 'mongo'),
'port' => env('DB_PORT', 27017),
'database' => env('admin'),
'username' => env('admin'),
'password' => env('123'),
'options' => [
'database' => 'admin' // sets the authentication database required by mongo 3
]
],
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', 3306),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => env('DB_PREFIX', ''),
'strict' => env('DB_STRICT_MODE', true),
'engine' => env('DB_ENGINE', null),
'timezone' => env('DB_TIMEZONE', '+00:00'),
],
'migrations' => 'migrations',
];
迁移文件 date_create_users_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->name();
$table->string('email')->unique();
$table->string('password', 60);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
.env(在应用程序文件夹内)
APP_NAME=Lumen
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_TIMEZONE=UTC
LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=
DB_CONNECTION=mongodb
DB_HOST=mongo
DB_PORT=27017
DB_DATABASE=admin
DB_USERNAME=admin
DB_PASSWORD=123
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
如何解决此错误?
注意:当我直接在服务器上运行此命令时,我收到相同的错误。
如果需要更多信息,请告诉我。
解决方案
推荐阅读
- microsoft-graph-api - 如何从 Microsoft Search API 获取“@microsoft.graph.downloadUrl”?
- python - Pythons os.walk() 访问所有文件夹而不是仅访问给定文件夹
- python - 如何选择标签
- macos - Android studio 返回无法下载 gradle 并且还有缓存问题是什么意思?
- plc - 整个功能块真的存储在 RETAIN 内存中吗?
- c# - WebView2如何加载本地文件?
- sql - 如何在 2 个表之间建立链接?
- react-native - react-native-webview 中的按钮
- python - 计算连续的字母
- javascript - 使用部分 GLTF 作为 InstancedMesh