未在my Laravel容器内更新路由
我有一个docker作曲:未在my Laravel容器内更新路由,laravel,docker,docker-compose,Laravel,Docker,Docker Compose,我有一个docker作曲: version: '3' services: app: build: context: . dockerfile: .docker/Dockerfile image: laravel-docker ports: - 8080:80 volumes: - ./:/var/www links: - mysql - redis environment:
version: '3'
services:
app:
build:
context: .
dockerfile: .docker/Dockerfile
image: laravel-docker
ports:
- 8080:80
volumes:
- ./:/var/www
links:
- mysql
- redis
environment:
DB_HOST: mysql
DB_DATABASE: laravel_docker
DB_USERNAME: app
DB_PASSWORD: password
REDIS_HOST: redis
SESSION_DRIVER: redis
CACHE_DRIVER: redis
mysql:
image: mysql:5.7
ports:
- 13306:3306
environment:
MYSQL_DATABASE: laravel_docker
MYSQL_USER: app
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
redis:
image: redis:4.0-alpine
ports:
- 16379:6379
这个Dockerfile:
FROM php:7.1.8-apache
COPY . /srv/app
COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf
WORKDIR /srv/app
RUN docker-php-ext-install mbstring pdo pdo_mysql \
&& chown -R www-data:www-data /srv/app
RUN a2enmod rewrite
这是我运行带有MySQL和Redis的Laravel容器的配置。一切都运行得很好,但当我尝试添加(或更新)新路由时遇到了问题:它不会出现,除非我停止所有容器并使用--build
标记重新启动它们
有没有办法在不重新启动我的容器的情况下添加和更新路由?ssh到应用程序容器,并从项目目录运行以下命令:
php-artisan-route:clear
ssh到应用程序容器,并从项目目录运行以下命令:
php-artisan-route:clear
我很想知道您的更改是否正确地传播到卷中。这可能是容器内的权限问题。如果连接到容器并“cat”路由文件的内容,会发生什么情况?它是否与容器外的文件匹配?你在哪个操作系统上运行docker?操作系统的文件系统锁定程度如何?是否有任何限制会使卷的工作变得不正常?另外,您使用的是什么文件系统同步过程?您只是在使用默认设置吗?我很想知道您的更改是否正确地传播到卷中。这可能是容器内的权限问题。如果连接到容器并“cat”路由文件的内容,会发生什么情况?它是否与容器外的文件匹配?你在哪个操作系统上运行docker?操作系统的文件系统锁定程度如何?是否有任何限制会使卷的工作变得不正常?另外,您使用的是什么文件系统同步过程?您只是在使用默认值吗?基于您的应用程序位于/srv/app的Dockerfile,但在yml文件中您将/var/www列为装载目标。将其更改为/srv/app
说明:
构建Dockerfile会产生一个不可变的映像。映像中的软件已配置为从/srv/app为您的应用程序提供服务。因为复制/srv/app
将您的应用程序添加到图像的正确位置,从那里可以很好地提供服务,但该命令会在构建图像时添加该应用程序,然后它会成为图像中不可变的一部分,因此您在主机上所做的更改不会在内部可见。您要做的是将您的项目目录绑定到/srv/app,这将用主机上的目录模糊(临时“替换”)该目录的内容,这就是yml行所做的。(顺便说一句,现有目录不是docker特有的。)
我们经常复制和绑定挂载项目目录的原因是,这种做法允许我们在开发(无需频繁重建图像)和生产中使用相同的Dockerfile。基于您的应用程序位于/srv/app的Dockerfile,但在yml文件中您将/var/www列为挂载目标。将其更改为/srv/app 说明: 构建Dockerfile会产生一个不可变的映像。映像中的软件已配置为从/srv/app为您的应用程序提供服务。因为
复制/srv/app
将您的应用程序添加到图像的正确位置,从那里可以很好地提供服务,但该命令会在构建图像时添加该应用程序,然后它会成为图像中不可变的一部分,因此您在主机上所做的更改不会在内部可见。您要做的是将您的项目目录绑定到/srv/app,这将用主机上的目录模糊(临时“替换”)该目录的内容,这就是yml行所做的。(顺便说一句,现有目录不是docker特有的。)
我们经常复制和绑定挂载项目目录的原因是,这种做法允许我们在开发(无需频繁重建图像)和生产中使用相同的Dockerfile。好主意,我没有尝试检查容器内部的内容是否与外部相同!!我会努力的,我会更新你的!如果它们不匹配,我会感到惊讶,但我看到了更奇怪的问题。你也可以看看这个项目,看看它是否有用。这些人经常在这个项目中维护类似的问题。可能值得探索。好主意,我没有试着检查容器内的内容是否与容器外的内容相同!!我会努力的,我会更新你的!如果它们不匹配,我会感到惊讶,但我看到了更奇怪的问题。你也可以看看这个项目,看看它是否有用。这些人经常在这个项目中维护类似的问题。可能值得探索。可能就是这个,是的。可能就是这个,是的。这就是问题所在!!你能解释一下是什么问题吗?我知道这是解决问题的办法,没关系,但我想知道为什么会有这样的问题!无论如何谢谢你!这就是问题所在!!你能解释一下是什么问题吗?我知道这是解决问题的办法,没关系,但我想知道为什么会有这样的问题!无论如何谢谢你!