【问题标题】:Nginx error when serving angular app on docker在 docker 上提供 Angular 应用程序时出现 Nginx 错误
【发布时间】:2019-09-22 00:17:34
【问题描述】:

我使用 ng build 由 Angular 应用程序构建

现在我cddist/iDot 文件夹并运行

docker run -d -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx:alpine

但是当我访问 url 时,它显示 nginx 403 Forbidden 错误。

我有chmod 777 dist 文件夹和文件,似乎没有任何影响。

Dist 文件夹

garg10may@GCES15511:~/iDot/frontend/dist$ ls
iDot
garg10may@GCES15511:~/iDot/frontend/dist$ ls -ltrh iDot/
total 21M
-rwxrwxrwx 1 garg10may garg10may  49K May  3 18:02 main.js
-rwxrwxrwx 1 garg10may garg10may 284K May  3 18:02 es2015-polyfills.js
-rwxrwxrwx 1 garg10may garg10may 767K May  3 18:02 styles.js
-rwxrwxrwx 1 garg10may garg10may 6.1K May  3 18:02 runtime.js
-rwxrwxrwx 1 garg10may garg10may 236K May  3 18:02 polyfills.js
-rwxrwxrwx 1 garg10may garg10may 207K May  3 18:02 es2015-polyfills.js.map
-rwxrwxrwx 1 garg10may garg10may 8.9M May  3 18:02 vendor.js
-rwxrwxrwx 1 garg10may garg10may  28K May  3 18:02 main.js.map
-rwxrwxrwx 1 garg10may garg10may 6.1K May  3 18:02 runtime.js.map
-rwxrwxrwx 1 garg10may garg10may 235K May  3 18:02 polyfills.js.map
-rwxrwxrwx 1 garg10may garg10may 820K May  3 18:02 styles.js.map
-rwxrwxrwx 1 garg10may garg10may 9.4M May  3 18:02 vendor.js.map
-rwxrwxrwx 1 garg10may garg10may  829 May  3 18:02 index.html
-rwxrwxrwx 1 garg10may garg10may 5.4K May  3 18:02 favicon.ico

容器运行良好

garg10may@GCES15511:~/iDot/frontend$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
fcd8af3018e6        nginx:alpine        "nginx -g 'daemon of…"   10 minutes ago      Up 10 minutes       0.0.0.0:8080->80/tcp     wonderful_shockley
5e1e49e7cc24        idot                "java -Djava.securit…"   6 hours ago         Up 6 hours          0.0.0.0:8081->8081/tcp   idot
69a43bc460e1        mysql:5.7           "docker-entrypoint.s…"   6 hours ago         Up 6 hours          3306/tcp, 33060/tcp      idb

docker 日志 {container}

2019/05/03 12:54:34 [error] 7#7: *1 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:8080"
172.17.0.1 - - [03/May/2019:12:54:34 +0000] "GET / HTTP/1.1" 403 556 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-"

尝试1:

garg10may@GCES15511:~/iDot/frontend/dist/iDot$ ls
es2015-polyfills.js      favicon.ico  main.js      polyfills.js      runtime.js      styles.js      vendor.js
es2015-polyfills.js.map  index.html   main.js.map  polyfills.js.map  runtime.js.map  styles.js.map  vendor.js.map
garg10may@GCES15511:~/iDot/frontend/dist/iDot$ cd ..
garg10may@GCES15511:~/iDot/frontend/dist$ docker run -d -p 8080:80 -v $(pwd)/iDot:/usr/share/nginx/html nginx:alpine
21910db703790152bf622ce01b2c814a224f1054e103e1d6b62c4b71fd47d542
garg10may@GCES15511:~/iDot/frontend/dist$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
21910db70379        nginx:alpine        "nginx -g 'daemon of…"   3 seconds ago       Up 1 second         0.0.0.0:8080->80/tcp     ecstatic_germain
5e1e49e7cc24        idot                "java -Djava.securit…"   7 hours ago         Up 7 hours          0.0.0.0:8081->8081/tcp   idot
69a43bc460e1        mysql:5.7           "docker-entrypoint.s…"   7 hours ago         Up 7 hours          3306/tcp, 33060/tcp      idb
garg10may@GCES15511:~/iDot/frontend/dist$ docker exec -it ecstatic_germain ls -l /usr/share/nginx/html/
total 0
drwxr-xr-x    2 root     root            40 May  3 12:47 iDot
garg10may@GCES15511:~/iDot/frontend/dist$ docker exec -it ecstatic_germain ls -l /usr/share/nginx/html/iDot
total 0
garg10may@GCES15511:~/iDot/frontend/dist$

【问题讨论】:

  • 可以分享dist文件夹结构吗
  • 它在容器内工作吗?您可以使用 docker logs 检查 docker 日志。 403错误是nginx的吗?规则定义正确吗?

标签: angular docker


【解决方案1】:

我认为在 dist 文件夹中会有另一个具有应用程序名称的文件夹,您需要在卷映射到 nginx 映像时提供该文件夹。 cd 进入您的应用程序名称文件夹并运行相同的命令,它会工作

【讨论】:

    【解决方案2】:

    改为挂载 iDot 目录 -

    $ cd ~/iDot/frontend/dist
    $ docker run -d -p 8080:80 -v $(pwd)/iDot:/usr/share/nginx/html nginx:alpine

    您可能会收到 403,因为 nginx 无法在文档根目录中获取可读/可执行的 index.html 文件。

    有关更多信息,请尝试在容器中执行 docker exec -

    $ docker exec -it 88c73dc32cad ls -l /usr/share/nginx/html/

    【讨论】:

    • 已安装 iDot 但仍然 403 错误,日志 2019/05/03 12:58:03 [error] 7#7: *1 directory index of "/usr/share/nginx/html/" is forbidden, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:8080" 172.17.0.1 - - [03/May/2019:12:58:03 +0000] "GET / HTTP/1.1" 403 556 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-"
    • 共享命令输出 - docker exec -it 88c73dc32cad ls -l /usr/share/nginx/html/
    • garg10may@GCES15511:~/iDot/frontend/dist$ docker exec -it elated_fermi ls -l /usr/share/nginx/html/ total 0
    • 目录未正确挂载。我可以确认,如果您按照答案中的指示使用当前文件结构安装它,您将不会获得类似的输出。现在从头开始可能会有所帮助。
    • 我假设您正在从~/iDot/frontend/dist 目录运行docker run 命令,并且iDot 文件夹位于dist 内,其中包含index.html
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多