Интересно, возможно ли одновременно запустить Laravel + Lumen с помощью Docker? Поэтому я создал новую установку Laravel и Lumen в отдельной папке, поэтому я собираюсь использовать Lumen для API, и я хочу знать, возможно ли запустить их оба, используя только один контейнер.
Я уже пытался изменить порты, но все равно не повезло, Laravel работает без сбоев, но не для Lumen.
Вот файлы, они идентичны, но различия только в портах (я не знаю, правильно ли я делаю)
docker-compose.yml
version: '2'
services:
web:
build:
context: ./
dockerfile: web.dockerfile
volumes:
- ./:/var/www
ports:
- "8080:80"
links:
- app
app:
build:
context: ./
dockerfile: app.dockerfile
volumes:
- ./:/var/www
links:
- database
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
database:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: dockerApp
ports:
- "33061:3306"
cache:
image: redis:3.0
ports:
- "63791:6379"
app.dockerfile
FROM php:7.1.19-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client \
&& docker-php-ext-install mcrypt pdo_mysql
WORKDIR /var/www
web.dockerfile
FROM nginx:1.10
ADD ./vhost.conf/ /etc/nginx/conf.d/default.conf
WORKDIR /var/www
vhost.conf
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33987802df30 test-restful-api_web "nginx -g 'daemon of…" 34 hours ago Up About a minute 80/tcp, 443/tcp, 0.0.0.0:32768->8001/tcp test-restful-api_web_1
7f4b767ff2af test-restful-api_app "docker-php-entrypoi…" 34 hours ago Up About a minute 9000/tcp test-restful-api_app_1
be0675a6804d redis:3.0 "docker-entrypoint.s…" 34 hours ago Up About a minute 6379/tcp, 0.0.0.0:63793->63792/tcp test-restful-api_cache_1
f0b5fe2db9a4 mysql:5.6 "docker-entrypoint.s…" 34 hours ago Up About a minute 3306/tcp, 0.0.0.0:33063->33062/tcp test-restful-api_database_1
bdb308c7288f test_web "nginx -g 'daemon of…" 34 hours ago Up About a minute 443/tcp, 0.0.0.0:8080->80/tcp test_web_1
a74a1b5c2ec7 test_app "docker-php-entrypoi…" 34 hours ago Up About a minute 9000/tcp test_app_1
690b553eae36 mysql:5.6 "docker-entrypoint.s…" 34 hours ago Up About a minute 0.0.0.0:33061->3306/tcp test_database_1
fc47a3a84484 redis:3.0 "docker-entrypoint.s…" 34 hours ago Up About a minute 0.0.0.0:63791->6379/tcp test_cache_1
Чего я пытаюсь достичь
Я хочу сделать что-то подобное на хостинге test.com
(основной сайт) и api.test.com
(для остальных API) , но вместо этого на своей машине я хочу запустить что-то вроде этого (если это возможно)
localhost: 8080 (сайт)
localhost: 8000/8001 (остальные API)
UPDATE
Я просто делаю изменения для каталога, прежде чем это было так
all_project_folder
---- test // front end project folder which is using Laravel 5.8
-------- * bunch of laravel things
-------- web.dockerfile
-------- app.dockerfile
-------- vhost.conf
-------- docker-compose.yml
---- test-restful-api // restful api project folder which is using Lumen 5.8
-------- * bunch of laravel things
-------- web.dockerfile
-------- app.dockerfile
-------- vhost.conf
-------- docker-compose.yml
Но теперь я уже изменяю это на эту структуру
all_project_folder
---- test // folder for grouping the api and frontend
-------- frontend // test frontend folder which is laravel
-------- * bunch of laravel things
------------ web.dockerfile
------------ app.dockerfile
------------ vhost.conf
-------- restful-api // test api folder which is lumen
------------ web.dockerfile
------------ app.dockerfile
------------ vhost.conf
-------- docker-compose.yml // now there's only 1 docker-compose file, and it's outside those 2 folders (and the project can be added something like backend)
Так как же теперь настроить файл docker с помощью version 3
? Я уже пытался прочитать документацию, но я все еще не получил ее, и есть несколько примеров, которые отличаются друг от друга, поэтому я не уверен, какой из них мне следует использовать. (извините, я очень новичок в этом деле)

docker-compose.yml мой последний подход возвращает ошибку ERROR: Service "web" uses an undefined network "frontend"
version: '3'
services:
web:
build:
context: ./
dockerfile: frontend/web.dockerfile
volumes:
- ./:/var/www
ports:
- "8080:80"
networks:
- frontend
- api
frontend:
build:
context: ./
dockerfile: frontend/app.dockerfile
volumes:
- ./:/var/www
networks:
- database
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
api:
build:
context: ./
dockerfile: restful-api/app.dockerfile
volumes:
- ./:/var/www
networks:
- database
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
database:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: dockerApp
ports:
- "33061:3306"
cache:
image: redis:3.0
ports:
- "63791:6379"
Я только что добавил networks to my docker-compose.yml
, но вместо этого получаю эту ошибку
ОШИБКА: файл Compose '. \ Docker-compose.yml' недопустим, потому что:
Неподдерживаемый параметр конфигурации для services.networks: 'frontend'
networks:
frontend:
driver: asisten-pajak-frontend
api:
driver: asisten-pajak-api