问题描述
我有一个非常简单的任务,就是为Caddy v2中的docker-composse.yml
中定义的服务设置reverse_proxy。一切都按预期工作,但出于某种原因,我似乎无法从任何类型的Docker容器中的create-react-app
提供构建资产。
我在Dockerfile
中尝试了以下两种方法:
FROM Nginx:alpine
copY ./build /usr/share/Nginx/html
FROM node:14-alpine
copY ./build /app
copY ./npm-shrinkwrap.json /app/.
copY ./package.json /app/.
workdir /app
RUN npm install -g serve && npm ci
CMD [ "serve","-s","/app","-l","80" ]
请注意,在两种情况下,我都可以通过SSL进行连接,而在网络级别上没有任何问题。在这两种情况下,我都会在空白屏幕上看到控制台上显示错误Manifest: Line: 1,column: 1,Syntax error.
。在manifest.json
上报告了此错误,该错误完全为空白。我已验证容器中的同一文件在正确的位置具有预期的内容,因此必须防止其加载。
我什至不知道从哪里开始。我似乎不了解那里有什么可疑的地方,这从来不是一个好兆头。 Caddy只需为200
上的成功GET报告index.html
。该文件实际上是在浏览器中加载的,只是没有内容。
如果这不是显而易见的事情,我会发布一个可以正常运行的示例项目,但是为了调试,我从create-react-app
的默认输出开始,只是添加了{{1} },Dockerfile
和docker-compose.yml
。
Cadyfile
{
# Global options block. Entirely optional,https is on by default
# Optional email key for lets encrypt
email admin@watheia.dev
# Optional staging lets encrypt for testing. Comment out for production.
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
my-app.watheia.dev {
reverse_proxy / my-app:80
}
PS:仅在没有SSL支持的情况下,从主机系统运行version: "3.1"
services:
caddy:
image: caddy/caddy:2.2.1-alpine
container_name: caddy-service
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
# from project root
- cady/Caddyfile:/etc/caddy/Caddyfile
# These start out empty and fil with cache data
- caddy/data:/data
- caddy/config:/config
my-app:
build: .
hostname: my-app.watheia.dev
container_name: my-app
depends_on:
- caddy
即可正常工作。
PPS:我在这里的知识差距主要是在serve -s ./build -l 8080
上。这是我第一次尝试在localhost之外部署一个。
解决方法
哎呀,我傻了!
我只是代理/
路径。 h!我一定忽略了它一千次。应该是:
my-app.watheia.dev {
reverse_proxy my-app:80
}