Ray*_*yan 1 laravel docker laravel-sail
我从 GitHub 克隆了一个存储库,这是一个已经有 Sail 的 Laravel 项目。\n然后为了安装 Composer 依赖项,我运行了:
\ndocker run --rm \\\n -u "$(id -u):$(id -g)" \\\n -v "$(pwd):/var/www/html" \\\n -w /var/www/html \\\n laravelsail/php81-composer:latest \\\n composer install --ignore-platform-reqs\nRun Code Online (Sandbox Code Playgroud)\n之后,我运行了sail up。\n所有图像均已拉取并构建。
现在我可以通过浏览器访问该项目及其路径,甚至可以使用sail mysql命令。但问题是,当我运行sail artisan命令时,会显示此消息:\n service "laravel.test" is not running container #1。
我使用的是 Windows,并且wsl2它ubuntu 20也是默认的 Linux 发行版。
提示:在另一个新项目中,我对 Sail 没有任何问题。
\n我之前做了这些事情,但没有解决问题:
\nAPP_SERVICE=laravel.test到.env.composer update。为了澄清我的问题,我将在下面添加更多代码。
\ndocker-compose.yml:
version: "3.7"\nservices:\n\n #Laravel App\n app:\n build:\n context: ./docker/php/${DOCKER_PHP_VERSION}\n dockerfile: Dockerfile\n args:\n xdebug_enabled: ${DOCKER_PHP_XDEBUG_ENABLED}\n image: ${COMPOSE_PROJECT_NAME}-app\n restart: unless-stopped\n tty: true\n working_dir: /var/www/html\n environment:\n XDEBUG_MODE: '${DOCKER_PHP_XDEBUG_MODE:-off}'\n volumes:\n - ./:/var/www/html\n networks:\n - app_network\n depends_on:\n - mysql\n - redis\n - meilisearch\n - minio\n\n nginx:\n image: nginx:alpine\n restart: unless-stopped\n tty: true\n ports:\n - '${DOCKER_NGINX_PORT:-80}:80'\n volumes:\n - ./:/var/www/html\n - ./docker/nginx/dev/:/etc/nginx/conf.d/\n networks:\n - app_network\n depends_on:\n - app\n\n\n # S3 Development\n minio:\n image: 'minio/minio:latest'\n ports:\n - '${DOCKER_MINIO_PORT:-9000}:9000'\n - '${DOCKER_MINIO_CONSOLE_PORT:-8900}:8900'\n environment:\n MINIO_ROOT_USER: 'laravel'\n MINIO_ROOT_PASSWORD: 'password'\n volumes:\n - 'appminio:/data/minio'\n networks:\n - app_network\n command: minio server /data/minio --console-address ":8900"\n healthcheck:\n test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]\n retries: 3\n timeout: 5s\n\n # Laravel Scout Search Provider\n meilisearch:\n image: 'getmeili/meilisearch:latest'\n platform: linux/x86_64\n environment:\n - PUID=${DOCKER_PUID:-1000}\n - PGID=${DOCKER_PGID:-1000}\n - TZ=${DOCKER_TZ:-Australia/Brisbane}\n restart: unless-stopped\n ports:\n - '${DOCKER_MEILISEARCH_PORT:-7700}:7700'\n volumes:\n - 'appmeilisearch:/data.ms'\n networks:\n - app_network\n\n # Database\n mysql:\n image: 'mysql/mysql-server:8.0'\n command: --default-authentication-plugin=mysql_native_password\n ports:\n - '${DOCKER_MYSQL_PORT:-3306}:3306'\n environment:\n MYSQL_ROOT_PASSWORD: '${DB_PASSWORD:-abc123}'\n MYSQL_ROOT_HOST: "%"\n MYSQL_DATABASE: '${DB_DATABASE:-laravel}'\n MYSQL_USER: '${DB_USERNAME:-laravel}'\n MYSQL_PASSWORD: '${DB_PASSWORD:-abc123}'\n MYSQL_ALLOW_EMPTY_PASSWORD: 1\n restart: unless-stopped\n volumes:\n - 'appmysql:/var/lib/mysql'\n networks:\n - app_network\n healthcheck:\n test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]\n retries: 3\n timeout: 5s\n\n # Debug emails sent from the app\n mailcatcher:\n restart: unless-stopped\n image: dockage/mailcatcher\n environment:\n - PUID=${DOCKER_PUID:-1000}\n - PGID=${DOCKER_PGID:-1000}\n - TZ=${DOCKER_TZ:-Australia/Brisbane}\n ports:\n - "${DOCKER_MAILCATCHER_WEB_PORT:-1080}:1080"\n - "${DOCKER_MAILCATCHER_SMTP_PORT:-1025}:1025"\n networks:\n - app_network\n\n # Redis Database\n redis:\n healthcheck:\n test: [ "CMD", "redis-cli", "ping" ]\n interval: 1m\n timeout: 10s\n retries: 3\n start_period: 30s\n image: redis\n restart: unless-stopped\n volumes:\n - 'appredis:/data'\n environment:\n - PUID=${DOCKER_PUID:-1000}\n - PGID=${DOCKER_PGID:-1000}\n - TZ=${DOCKER_TZ:-Australia/Brisbane}\n ports:\n - ${DOCKER_REDIS_PORT:-6379}:6379\n networks:\n - app_network\n\nvolumes:\n appredis:\n driver: local\n appmysql:\n driver: local\n appmeilisearch:\n driver: local\n appminio:\n driver: local\n\nnetworks:\n app_network:\n driver: bridge\nRun Code Online (Sandbox Code Playgroud)\n.env:
APP_NAME="Boilerplate"\nAPP_ENV=local\nAPP_KEY=my_app_key\nAPP_DEBUG=true\nAPP_URL=http://127.0.0.1:8000\nFRONTEND_URL=http://127.0.0.1:8000\nEMAIL_VERIFICATION_REQUIRED=true\nTOKEN_ON_REGISTER=false\n\nLOG_CHANNEL=stack\n\nDB_CONNECTION=mysql\nDB_HOST=mysql\nDB_PORT=3306\nDB_DATABASE=my_database\nDB_USERNAME=username\nDB_PASSWORD=password\n\nBROADCAST_DRIVER=log\nCACHE_DRIVER=file\nQUEUE_CONNECTION=database\nSESSION_DRIVER=file\nSESSION_LIFETIME=120\nSESSION_CONNECTION=localhost\n\nREDIS_HOST=redis\nREDIS_PASSWORD=null\nREDIS_PORT=6379\n\nMAIL_MAILER=smtp\nMAIL_HOST=mailcatcher\nMAIL_PORT=1025\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\nMAIL_ENCRYPTION=null\nMAIL_FROM_ADDRESS=myemail@test.com\nMAIL_FROM_NAME="${APP_NAME}"\n\nSCOUT_DRIVER=meilisearch\nMEILISEARCH_HOST=http://127.0.0.1:7700\nMEILISEARCH_KEY=masterKey\n\n#FILESYSTEM_DRIVER=s3\nAWS_ACCESS_KEY_ID=access_key\nAWS_SECRET_ACCESS_KEY=pass\nAWS_DEFAULT_REGION=region\nAWS_BUCKET=bucket\nAWS_ENDPOINT=http://s3:9000\nAWS_USE_PATH_STYLE_ENDPOINT=true\n\nPUSHER_APP_ID=\nPUSHER_APP_KEY=\nPUSHER_APP_SECRET=\nPUSHER_APP_CLUSTER=mt1\n\nMIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"\nMIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"\n\nDOCKER_PUID=1000\nDOCKER_PGID=1000\nDOCKER_TZ=Australia/Brisbane\nDOCKER_NGINX_PORT=8000\nDOCKER_REDIS_PORT=6379\nDOCKER_MAILCATCHER_WEB_PORT=1080\nDOCKER_MAILCATCHER_SMTP_PORT=1025\nDOCKER_MEILISEARCH_PORT=7700\nDOCKER_MYSQL_PORT=3306\nDOCKER_MINIO_PORT=9000\nDOCKER_MINIO_CONSOLE_PORT=8900\nCOMPOSE_PROJECT_NAME=boilerplate\nDOCKER_PHP_VERSION=8.1\nDOCKER_PHP_XDEBUG_ENABLED=false\nDOCKER_PHP_XDEBUG_MODE=develop,debug\nRun Code Online (Sandbox Code Playgroud)\ncomposer.json:
{\n "name": "laravel/laravel",\n "type": "project",\n "description": "Safe Proud API",\n "keywords": ["framework", "laravel"],\n "license": "MIT",\n "require": {\n "php": "^8.0|^8.1|^8.2",\n "ext-curl": "*",\n "ext-json": "*",\n "aws/aws-sdk-php": "^3.144",\n "balping/laravel-hashslug": "^2.2",\n "bolechen/nova-activitylog": "^v0.3.0",\n "classic-o/nova-media-library": "^1.0",\n "cloudcake/nova-snowball": "^1.2",\n "dcblogdev/laravel-sent-emails": "^2.0",\n "emilianotisato/nova-tinymce": "^1",\n "eminiarts/nova-tabs": "^1.5",\n "guzzlehttp/guzzle": "^7.2",\n "johnathan/nova-trumbowyg": "^1.0",\n "kutia-software-company/larafirebase": "^1.3",\n "laravel/framework": "^9.19",\n "laravel/nova": "*",\n "laravel/sanctum": "^3.0",\n "laravel/scout": "^9.4",\n "laravel/tinker": "^2.7",\n "laravel/vapor-cli": "^1.13",\n "laravel/vapor-core": "^2.22",\n "laravel/vapor-ui": "^1.5",\n "league/flysystem-aws-s3-v3": "~3.0",\n "mpociot/versionable": "^4.3",\n "nnjeim/world": "^1.1",\n "optimistdigital/nova-page-manager": "^3.1",\n "outl1ne/nova-settings": "^3.5",\n "spatie/laravel-activitylog": "^4.5",\n "spatie/laravel-permission": "^5.0",\n "vinkla/hashids": "^10.0",\n "vyuldashev/nova-permission": "^3.1",\n "whitecube/nova-flexible-content": "^0.2.6",\n "yab/laravel-scout-mysql-driver": "^5.1"\n },\n "require-dev": {\n "fakerphp/faker": "^1.9.1",\n "laravel/pint": "^1.1",\n "laravel/sail": "^1.0.1",\n "mockery/mockery": "^1.4.4",\n "nunomaduro/collision": "^6.1",\n "phpunit/phpunit": "^9.5.10",\n "spatie/laravel-ignition": "^1.0"\n },\n "repositories": [\n {\n "type": "path",\n "url": "./nova"\n }\n ],\n "autoload": {\n "psr-4": {\n "App\\\\": "app/",\n "Database\\\\Factories\\\\": "database/factories/",\n "Database\\\\Seeders\\\\": "database/seeders/"\n },\n "files": [\n "app/Http/helpers.php"\n ]\n },\n "autoload-dev": {\n "psr-4": {\n "Tests\\\\": "tests/"\n }\n },\n "scripts": {\n "post-autoload-dump": [\n "Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump",\n "@php artisan package:discover --ansi"\n ],\n "post-update-cmd": [\n "@php artisan vendor:publish --tag=laravel-assets --ansi --force",\n "@php artisan vapor-ui:publish --ansi"\n ],\n "post-root-package-install": [\n "@php -r \\"file_exists('.env') || copy('.env.example', '.env');\\""\n ],\n "post-create-project-cmd": [\n "@php artisan key:generate --ansi"\n ]\n },\n "extra": {\n "laravel": {\n "dont-discover": []\n }\n },\n "config": {\n "optimize-autoloader": true,\n "preferred-install": "dist",\n "sort-packages": true,\n "allow-plugins": {\n "pestphp/pest-plugin": true\n }\n },\n "minimum-stability": "dev",\n "prefer-stable": true\n}\nRun Code Online (Sandbox Code Playgroud)\n另外,当我跑步时sail up:
[+] Running 7/0\n \xe2\xa0\xbf Container boilerplate-meilisearch-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-redis-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-minio-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-mysql-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-mailcatcher-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-app-1 Created 0.0s\n \xe2\xa0\xbf Container boilerplate-nginx-1 Created 0.0s\nAttaching to boilerplate-app-1, boilerplate-mailcatcher-1, boilerplate-meilisearch-1, boilerplate-minio-1, boilerplate-mysql-1, boilerplate-nginx-1, boilerplate-redis-1\nboilerplate-redis-1 | 1:C 18 Nov 2022 20:44:41.772 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo\nboilerplate-redis-1 | 1:C 18 Nov 2022 20:44:41.772 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=1, just started\nboilerplate-redis-1 | 1:C 18 Nov 2022 20:44:41.772 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.774 * monotonic clock: POSIX clock_gettime\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.775 * Running mode=standalone, port=6379.\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.775 # Server initialized\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.775 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * Loading RDB produced by version 7.0.5\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * RDB age 53 seconds\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * RDB memory usage when created 0.85 Mb\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * Done loading RDB, keys loaded: 0, keys expired: 0.\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * DB loaded from disk: 0.000 seconds\nboilerplate-redis-1 | 1:M 18 Nov 2022 20:44:41.776 * Ready to accept connections\nboilerplate-mailcatcher-1 | Starting MailCatcher v0.8.2\nboilerplate-mailcatcher-1 | ==> smtp://0.0.0.0:1025\nboilerplate-mysql-1 | [Entrypoint] MySQL Docker Image 8.0.31-1.2.10-server\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | 888b d888 d8b 888 d8b\n 888\nboilerplate-meilisearch-1 | 8888b d8888 Y8P 888 Y8P\n 888\nboilerplate-meilisearch-1 | 88888b.d88888 888\n 888\nboilerplate-meilisearch-1 | 888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b.\nboilerplate-meilisearch-1 | 888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b\nboilerplate-meilisearch-1 | 888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888\nboilerplate-meilisearch-1 | 888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888\nboilerplate-meilisearch-1 | 888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | Database path: "./data.ms"\nboilerplate-meilisearch-1 | Server listening on: "http://0.0.0.0:7700"\nboilerplate-meilisearch-1 | Environment: "development"\nboilerplate-meilisearch-1 | Commit SHA: "unknown"\nboilerplate-meilisearch-1 | Commit date: "unknown"\nboilerplate-meilisearch-1 | Package version: "0.29.1"\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | Thank you for using Meilisearch!\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | We collect anonymized analytics to improve our product and your experience. To learn more, including how to turn off analytics, visit our dedicated documentation page: https://docs.meilisearch.com/learn/what_is_meilisearch/telemetry.html\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | Anonymous telemetry: "Enabled"\nboilerplate-meilisearch-1 | Instance UID: "1fa4148e-c0dc-46c7-9f61-f4abb8f0354c"\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | No master key found; The server will accept unidentified requests. If you need some protection in development mode, please export a key: export MEILI_MASTER_KEY=xxx\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | Documentation: https://docs.meilisearch.com\nboilerplate-meilisearch-1 | Source code: https://github.com/meilisearch/meilisearch\nboilerplate-meilisearch-1 | Contact: https://docs.meilisearch.com/resources/contact.html\nboilerplate-meilisearch-1 |\nboilerplate-meilisearch-1 | [2022-11-18T10:44:42Z INFO actix_server::builder] Starting 4 workers\nboilerplate-meilisearch-1 | [2022-11-18T10:44:42Z INFO actix_server::server] Actix runtime found; starting in Actix runtime\nboilerplate-mailcatcher-1 | ==> http://0.0.0.0:1080\nboilerplate-mysql-1 | [Entrypoint] Starting MySQL 8.0.31-1.2.10-server\nboilerplate-minio-1 | Warning: Default parity set to 0. This can lead to data loss.\nboilerplate-minio-1 | MinIO Object Storage Server\nboilerplate-minio-1 | Copyright: 2015-2022 MinIO, Inc.\nboilerplate-minio-1 | License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>\nboilerplate-minio-1 | Version: RELEASE.2022-11-11T03-44-20Z (go1.19.3 linux/amd64)\nboilerplate-minio-1 |\nboilerplate-minio-1 | Status: 1 Online, 0 Offline.\nboilerplate-minio-1 | API: http://172.19.0.5:9000 http://127.0.0.1:9000\nboilerplate-minio-1 | Console: http://172.19.0.5:8900 http://127.0.0.1:8900\nboilerplate-minio-1 |\nboilerplate-minio-1 | Documentation: https://min.io/docs/minio/linux/index.html\nboilerplate-mysql-1 | 2022-11-18T10:44:42.878570Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.\nboilerplate-mysql-1 | 2022-11-18T10:44:42.879744Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.\nboilerplate-mysql-1 | 2022-11-18T10:44:42.879769Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.31) starting as process 1\nboilerplate-mysql-1 | 2022-11-18T10:44:42.886273Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.\nboilerplate-mysql-1 | 2022-11-18T10:44:43.007089Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.\nboilerplate-app-1 | Installing Package Dependencies\nboilerplate-app-1 | Installing dependencies from lock file (including require-dev)\nboilerplate-app-1 | Verifying lock file contents can be installed on current platform.\nboilerplate-app-1 | Nothing to install, update or remove\nboilerplate-mysql-1 | 2022-11-18T10:44:43.275853Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.\nboilerplate-mysql-1 | 2022-11-18T10:44:43.275917Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.\nboilerplate-app-1 | Package gregoriohc/laravel-nova-theme-responsive is abandoned, you should avoid using it. No replacement was suggested.\nboilerplate-app-1 | Generating optimized autoload files\nboilerplate-mysql-1 | 2022-11-18T10:44:43.316329Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock\nboilerplate-mysql-1 | 2022-11-18T10:44:43.316463Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.31' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.\nboilerplate-nginx-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\nboilerplate-nginx-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\nboilerplate-nginx-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\nboilerplate-nginx-1 | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist\nboilerplate-nginx-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\nboilerplate-nginx-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\nboilerplate-nginx-1 | /docker-entrypoint.sh: Configuration complete; ready for start up\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: using the "epoll" event method\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: nginx/1.23.2\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: built by gcc 11.2.1 20220219 (Alpine 11.2.1_git20220219)\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: OS: Linux 5.10.102.1-microsoft-standard-WSL2\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker processes\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 20\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 21\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 22\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 23\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 24\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1: start worker process 25\nboilerplate-nginx-1 | 2022/11/18 10:44:43 [notice] 1#1
Ray*_*yan 15
我找到了解决方案。
看完这部分后docker-compose.yml:
version: "3.7"
services:
#Laravel App
app:
build:
context: ./docker/php/${DOCKER_PHP_VERSION}
dockerfile: Dockerfile
args:
xdebug_enabled: ${DOCKER_PHP_XDEBUG_ENABLED}
image: ${COMPOSE_PROJECT_NAME}-app
restart: unless-stopped
tty: true
working_dir: /var/www/html
Run Code Online (Sandbox Code Playgroud)
我意识到 Laravel 服务有一个不同的名称,在这个项目中是app。所以在.env文件中,我添加了以下内容:
APP_SERVICE=app
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4222 次 |
| 最近记录: |