![](/img/trans.png)
[英]Create internal connection between React and Laravel in Docker containers on server
[英]Sharing a folder between Docker-Containers with precompiled files
我使用 Github Actions 来制作一个带有 Laravel 的 php-fpm Docker 容器和预编译的 ZC5FD214CDD0D2B3BB42 文件中的 ZC5FD214CDD0D2B3BC27 文件。 CSS 和 JS 文件是用 npm 制作的。 这个 Docker 容器被推送到我的 Docker Regestry。
我想检查这个容器并让它运行 Docker-Compose 和一个 nginx 容器运行这个配置:
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
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;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
所以 PHP 部分运行完美,但是 CSS 和 JS 部分不工作,因为 app Container 有这个文件。 我如何在这两个容器之间复制、共享或其他内容?
您不能从主机中放入卷,因为卷将只包含主机上的内容,而不是容器中的内容……它必须指向另一个方向。
您应该使用完全符合您需求的命名卷
volumes:
assets:
services:
nginx:
...
volumes:
- assets:/var/www/public/:ro
app:
...
volumes:
- assets:/your/npm/output/folder
您的 JS/CSS 文件将在您的 2 个容器之间正确共享
您必须在 docker 构建时定义 docker 卷,然后设置您的预编译文件,然后将此命名卷安装到两个系统。
问题是您正在尝试安装已经在 docker 映像中的东西,而不是 docker 卷。 在 docker 运行时没有办法做到这一点。 那不是哲学。
总之,你正在做(错误地):
/your_dir
中的预编译文件创建docker build
image1docker-image1:/your_dir
因为它会覆盖它。好习惯:
docker build
image1 ,它将您的预编译保存在myvolumedocker run -t image1...
yourCssDocker安装myvolumedocker run -t image2...
yourNginxDocker ,挂载myvolume这就是继续的方式。 请注意,您应该通过其名称访问myvolume ,而不是通过绑定卷(主机路径)。
您可以仅使用 1 个 docker-compose.yml 文件(使用名为 docker 卷名的 css-precomp )完成所有步骤(来自良好实践的 4 个)
volumes:
css-precomp:
services:
my-service:
build:
- context: .
- dockerfile: Dockerfile
volumes:
- css-precomp:/your_dir
...
最后,您可以在 Dockerfile 中构建后检查您的数据是否正确生成,检查/var/lib/docker/volumes/css-precomp/_data
Dockerfile COPY
指令允许您将文件从一个图像复制到另一个图像。 如果您已经构建了 PHP 应用程序映像,则可以使用 static 文件构建 nginx 映像,例如:
FROM nginx:latest
COPY --from=my/php-app /usr/src/app /usr/share/nginx/html
COPY nginx.conf /etc/nginx
您现在将拥有两个独立的图像。 如果 PHP 映像中的内容发生更改,那么您可以重建 nginx 映像以获取更新的内容。 (如果您按照其他问题的建议使用命名卷,则必须手动删除包含 static 资产的卷以更新其内容。)此设置也适用于更高级的设置,其中每个组件可能运行多个副本不同的系统(Docker Swarm、Amazon ECS、Kubernetes)。
如果可以直接从后端服务提供 static 资产,并仅将 nginx 用作反向代理,则可以显着简化此部署顺序。 但是,使用 PHP-FPM 设置可能无法做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.