【问题标题】:Cannot run Strapi with Docker无法使用 Docker 运行 Strapi
【发布时间】:2021-01-22 21:18:52
【问题描述】:

我正在尝试 Dockerize 我的 Strapi 应用程序,所以首先我在项目的根目录中创建了一个 .env 文件,其中包含以下内容:

HOST=0.0.0.0
PORT=3002

那么,在backend/config/server.js 里面我有:

module.exports = ({ env }) => ({
  host: env("HOST", "0.0.0.0"),
  port: env.int("PORT"),
  admin: {
    auth: {
      secret: env("ADMIN_JWT_SECRET", "3b8efb990e54568fc0d91ff31390cda7"),
    },
  },
});

此代码应该将应用程序绑定到0.0.0.0。事实上,当我运行容器时,我可以看到它绑定到 0.0.0.0

在此之后,我创建了一个Dockerfile,其中包含以下说明:

FROM node:12

EXPOSE 3002

WORKDIR /backend

COPY ./package.json .
RUN npm install
COPY . .

RUN ls -l

CMD ["npm", "run", "develop"]

然后我有一个docker-compose.yml,它有:

version: '3'
services:
  backend:
    container_name: foo_backend
    build: ./backend/
    ports:
      - '3002:3002'
    volumes:
      - ./backend:/usr/src/foo/backend
      - /usr/src/foo/backend/node_modules
    environment:
      - APP_NAME=foo_backend
      - DATABASE_CLIENT=mysql
      - DATABASE_HOST=foo_mysql
      - DATABASE_PORT=3306
      - DATABASE_NAME=foo_db
      - DATABASE_USERNAME=foo
      - DATABASE_PASSWORD=foofoo
      - DATABASE_SSL=false
      - DATABASE_AUTHENTICATION_DATABASE=foo_db
      - HOST=localhost
    depends_on:
      - db
    restart: always

(我没有在此处添加db 服务)。

当我使用 docker-compose up --build 运行容器时,日志中一切正常:

但是当我访问 http://localhost:3002 时,我得到:

ERR_EMPTY_RESPONSE

这只发生在 Windows 上。有什么想法吗?

NGINX 配置

server {
        server_name mysite.backend.domain.com www.mysite.backend.domain.com;

        location / {
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://localhost:3002/;
        }

}

这是我得到的错误:

[error] 6783#6783: *82 recv() 在从上游读取响应标头时失败(104: Connection reset by peer),客户端:93.148.94.171,服务器:mysite.backend.domain.com 请求:“GET /favicon.ico HTTP/1.1”,上游:“http://127.0.0.1:3002/favicon.ico”,主机:“mysite.backend.domain.com”,引荐来源:“https://mysite.backend. domain.com/"

【问题讨论】:

  • 将文件从 Windows 挂载到本机 Linux 程序时文件行结尾可能会导致一些非常奇怪的问题。不确定这是否在这里起作用,但值得注意。
  • @ArthurWeborg 刚刚注意到即使在 linux 上也无法正常工作,实际上 nginx 以日志形式返回:upstream prematurely closed connection while reading response header from upstream, for large requests,这意味着出于某种原因 nodejs 正在关闭连接
  • 绝对有用的信息 -- 可能值得从标题中删除窗口
  • 你能从你正在运行的容器中 curl 服务吗? docker exec -it <container-running-backend> bash 然后做一个curl localhost:3002?是否也会产生类似的结果?
  • @ArthurWeborg 很棒的提示!似乎返回带有登录页面的 html,所以实际上似乎容器运行正常。为什么nginx返回502?我将使用 nginx 配置更新问题

标签: docker docker-compose strapi


【解决方案1】:

您在这里犯了一个小错误,在后端服务的环境变量中将 - HOST=localhost 替换为 - HOST=0.0.0.0 它会起作用的。

【讨论】:

    猜你喜欢
    • 2022-09-05
    • 1970-01-01
    • 2016-05-28
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多