J'utilisais Laradock sur une instance EC2 d'AWS pour créer un environnement de développement local pour Laravel.
Après avoir construit l'environnement Laradock, démarrez le conteneur avec docker-compose up -d nginx mysql
. Lorsque j'ai essayé de me connecter à "laradock_workspace_1" avec docker-compose exec workspace bash
et de générer Laravel, l'erreur suivante s'est produite.
Le type d'instance EC2 est "t2.micro" (RAM 1 Go) et l'AMI est Amazon Linux 2.
$ root@4e964ed4f2ce: composer create-project --prefer-dist laravel/laravel ./
Installing laravel/laravel (v7.0.0)
- Installing laravel/laravel (v7.0.0): Downloading (100%)
proc_open(): fork failed - Cannot allocate memory
The archive may contain identical file names with different capitalization (which fails on case insensitive filesystems)
Unzip with unzip command failed, falling back to ZipArchive class
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
PHP Warning: proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952
Warning: proc_open(): fork failed - Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 952
[ErrorException]
proc_open(): fork failed - Cannot allocate memory
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]
Je l'ai déjà vu, j'ai donc essayé de créer un fichier d'échange mais cela n'a pas fonctionné.
Le conteneur en cours d'exécution ressemble à ceci.
[ec2-user@ip-172-31-47-6 laradock]$ sudo docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:81->81/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp,
0.0.0.0:8080->8080/tcp
Essayez de créer un fichier d'échange normalement.
Utilisation de la mémoire (affichage Mo) Aucun espace de swap n'est actuellement alloué.
$ root@4e964ed4f2ce:/var/www# free -m
total used free shared buff/cache available
Mem: 983 566 217 3 200 232
Swap: 0 0 0
Créer un fichier pour l'espace d'échange
$ root@4e964ed4f2ce:/var/www# /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 14.8802 s, 72.2 MB/s
Définissez le fichier créé appelé swap.1 dans la zone d'échange
$ root@4e964ed4f2ce:/var/www# /sbin/mkswap /var/swap.1
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=450a4e24-3455-4466-a6e0-5daf190cdad3
Activer l'espace d'échange
root@4e964ed4f2ce:/var/www# /sbin/swapon /var/swap.1
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
swapon: /var/swap.1: swapon failed: Operation not permitted
Ensuite, l'erreur «swapon failed: Operation not allowed» apparaît et l'activation de la zone d'échange échoue. Puisqu'il s'agit d'un problème d'autorisation, je l'ai essayé avec sudo, mais le résultat n'a pas changé. Il semble que cela puisse être résolu en altérant les paramètres d'autorisation du système d'exploitation répertoriés dans le docker, mais je ne veux pas altérer les parties que je ne comprends pas tellement ...
La cause de l'échange est en premier lieu le manque de mémoire physique. Au lieu de créer un fichier d'échange et d'ajouter de la mémoire virtuelle, nous avons augmenté EC2. Type d'instance: t2.micro-> t2.small Je pense qu'il n'y a pas de problème car le taux horaire ne change qu'environ 1 yen.
Type d'instance | RAM(GB) | Tarification Linux en ligne |
---|---|---|
t2.micro | 1 | 0.0116 USD par heure |
t2.small | 2 | 0.023 USD par heure |
Contre-mesures lorsque la mémoire ne peut pas être allouée apparaît dans Laravel [Correspond à l'erreur opération Docker non autorisée](https://bmf-tech.com/posts/Docker%E3%81%AEOperation%20not%20permitted%E3%81%A8%E3%81%84%E3 % 81% 86% E3% 82% A8% E3% 83% A9% E3% 83% BC% 08% E3% 81% AB% E5% AF% BE% E5% BF% 9C% E3% 81% 99% E3 % 82% 8B)
Recommended Posts