所以,经过大量尝试后,我设法让我的Laravel 5.6应用程序通过docker运行。我正在创建图像并将其存储在Amazon ECR上。然后通过docker-compose我正在加载Laravel,Nginx和其他一些。
除了一件事,一切都很完美。与css和js等资产相关的所有内容都未加载(404)。
我尝试在前面加载'/',我尝试通过assets()函数,但无济于事。
所以,这是我用过的文件:
Laravel app的Dockerfile:
FROM php:7.1.15-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client zip unzip git libjpeg62-turbo-dev libpng12-dev libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install gd mcrypt pdo_mysql \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COPY php-fpm.conf /etc/php-fpm.conf
COPY www.conf /etc/php-fpm.d/www.conf
WORKDIR /var/www
COPY . /var/www
RUN composer update
RUN chown -R www-data: /var/www
此图片构建良好并存储在亚马逊中。
docker-compose文件:
version: '2'
services:
# The Laravel Application
app:
image: URL_TO_IMAGE-WORKS
restart: always
working_dir: /var/www
volumes:
- ./storage/app:/var/www/storage/app
- ./storage/logs:/var/www/storage/logs
- "./php-fpm.conf:/etc/php-fpm.conf"
- "./www.conf:/etc/php-fpm.d/www.conf"
links:
- database
environment:
- "DB_PORT=3306"
- "DB_HOST=database"
#The Nginx server
proxy:
build: server
working_dir: /var/www
restart: always
volumes_from:
- app
ports:
- "80:80"
database:
image: mysql:5.7.22
volumes:
- ./mysqldata_2:/var/lib/mysql
restart: always
environment:
- "MYSQL_ROOT_PASSWORD=secret"
- "MYSQL_DATABASE=secret"
- "MYSQL_PASSWORD=secret"
- "MYSQL_USER=secret"
ports:
- "33061:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- database
ports:
- '8080:80'
restart: always
environment:
PMA_HOST: database
PMA_PORT: 3306
elk:
image: sebp/elk
ports:
- "5601:5601"
- "9200:9200"
- "5044:5044"
NGINX Docker文件是:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY proxy.conf /etc/nginx/conf.d
NGINX使用的proxy.conf:
server {
listen 80;
server_name admin.mydomain.com;
include /etc/nginx/mime.types;
index index.php server.php;
root /var/www/public;
location / {
try_files $uri $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;
}
}
所以,在一切顺利启动之后,我明智地导航到admin.mydomain.com功能,但是css和js文件都没有加载。
我尝试了很多不同的设置,在docker镜像和nginx设置上都无济于事。任何见解都将受到高度赞赏!
注意:如果您需要任何额外的信息,请告诉我
答案 0 :(得分:0)
我遇到了这个问题。
php artisan storage:link
),并确保可以在容器中通过ls
找到文件。 我确保我的vhost.conf(使用apache)遵循符号链接。
我检查了dockerfile末尾是否启用了mod_rewrite(a2enmod rewrite
)。
答案 1 :(得分:0)
Nginx(代理docker)无需使用php脚本(应用docker)即可直接提供静态内容。 docker-compose文件必须为代理服务定义volume参数:
proxy:
build: server
working_dir: /var/www
restart: always
# Here the volume defined
volumes:
- ./:/var/www
ports:
- "80:80"
无需DB即可完成工作:
docker-compose.yml:
version: '3.4'
services:
app:
build:
context: ./
dockerfile: app.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www:cached
web:
build:
context: ./
dockerfile: web.dockerfile
working_dir: /var/www
volumes:
- ./:/var/www
ports:
- 81:81
app.dockerfile:
FROM php:7.1.3-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev \
mysql-client libmagickwand-dev --no-install-recommends \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install mcrypt pdo_mysql
web.dockerfile:
FROM nginx:1.10
ADD vhost.conf /etc/nginx/conf.d/default.conf
vhost.conf:
server {
listen 81;
index index.php server.php index.html;
root /var/www/public;
location / {
try_files $uri $uri/ /index.php$is_args$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;
}
}