【问题标题】:Accessing ssl .pem files inside docker container访问 docker 容器中的 ssl .pem 文件
【发布时间】:2021-11-04 18:02:28
【问题描述】:

我需要访问我的主机上的一个文件夹,该文件夹包含位于

的 let-encrypt 文件

/docker-volumes/etc/letsencrypt/live/mydomain.com

在我的一个容器上。 我已经在撰写文件中映射了卷。

compose.yml

version: "3"
services:
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - "./data:/data/db"
  api:
    container_name: my-api
    restart: always
    build:
      context: ./my_backend
       dockerfile: dockerfile
    ports:
      - "4002:443"
    volumes:
      - /docker-volumes/etc/letsencrypt/live/mydomain.com:/app/certs
    links:
      - mongo

dockerfile 在 my_backend

FROM node:10.16.3

WORKDIR /app

RUN mkdir certs

RUN mkdir public

RUN mkdir public/uploads

RUN mkdir public/videos

RUN mkdir public/reports

COPY ./package*.json ./

RUN npm install

COPY . .

CMD ["npm", "start"]

我需要从我的 server.js 文件中的 /app/certs 访问三个文件。

server.js

const fs = require("fs");
const https = require("https");
const credentials = {};
const path = require("path");

if (process.env.NODE_ENV === "production") {
  const privateKey = fs.readFileSync(
    path.join(__dirname, "certs/privkey.pem"),
    "utf8"
  );
  const certificate = fs.readFileSync(
    path.join(__dirname, "certs/cert.pem"),
    "utf8"
  );
  const ca = fs.readFileSync(path.join(__dirname, "certs/fullchain.pem"), "utf8");

  credentials["key"] = privateKey;
  credentials["cert"] = certificate;
  credentials["ca"] = ca;
}
...other logic and server.listen on port 443

当我启动 docker-compose up 时,它总是给我这个

{"error":{"errno":-2,"syscall":"open","code":"ENOENT","path":"/app/certs/privkey.pem"} ENOENT:没有这样的文件或目录 其他两个也是。

我被卡住了,谁能帮忙。我是 docker 新手。

【问题讨论】:

  • 如果你docker-compose run api ls /app/certs,在吗?
  • 它返回 README cert.pem chain.pem fullchain.pem privkey.pem

标签: node.js docker docker-compose dockerfile fs


【解决方案1】:

在我自己与同样的问题斗争了一整夜之后,我找到了原因,我希望这对将来遇到这个问题的人有所帮助:

/etc/letsencrypt/live/your-domain 中的证书实际上并不是证书,而是指向archive 文件夹中真实证书的快捷方式。 真正的证书:

/etc/letsencrypt/archive/your-domain/cert1.pem
/etc/letsencrypt/archive/your-domain/fullchain1.pem
...etc

因此,由于您只安装了 live 文件夹,因此在实际访问它时它没有指向任何内容。要解决此问题,请安装 archive 文件夹或整个 letsencrypt 文件夹,然后指向证书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2019-10-26
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多