代码之家  ›  专栏  ›  技术社区  ›  Maus

如何在扩展(node.js)docker映像上添加自定义CA证书

  •  3
  • Maus  · 技术社区  · 7 年前

    我正在扩展 node-red docker 图像(当前)基于 node:6

    我想将自定义SSL证书添加到docker映像的证书存储中。到目前为止,我做了以下工作:

    FROM nodered/node-red-docker
    
    ADD DigiCertCA.crt /usr/local/share/ca-certificates/
    RUN update-ca-certificates
    
    ADD settings.js /data/settings.js
    
    RUN npm install node-red-contrib-ttn
    RUN npm install node-red-contrib-influxdb
    RUN npm install node-red-admin
    RUN npm install node-red-node-geohash 
    
    CMD ["npm", "start", "--", "--userDir", "/data"]
    

    构建此映像失败,因为 RUN 作为非根用户执行 node .

    Updating certificates in /etc/ssl/certs... ln: failed to create symbolic link '/etc/ssl/certs/DigiCertCA.pem': Permission denied
    The command '/bin/sh -c update-ca-certificates' returned a non-zero code: 1
    

    我知道,作为非根,这样的操作是不可能的。但是,用自定义CA证书扩展现有图像的有效概念是什么?

    2 回复  |  直到 7 年前
        1
  •  3
  •   hardillb    7 年前

    为什么不把用户切换到root用户来运行添加证书的命令,然后再切换回来呢?

    FROM nodered/node-red-docker
    
    ADD DigiCertCA.crt /usr/local/share/ca-certificates/
    USER root
    RUN update-ca-certificates
    USER node-red
    
    
    ADD settings.js /data/settings.js
    
    RUN npm install node-red-contrib-ttn
    RUN npm install node-red-contrib-influxdb
    RUN npm install node-red-admin
    RUN npm install node-red-node-geohash 
    
    CMD ["npm", "start", "--", "--userDir", "/data"]
    
        2
  •  2
  •   Thiago Falcao    6 年前

    这是一个包含代理和证书的完整示例。

    使用 npm配置集cafile

    Dockerfile文件:

    FROM node:10.15.3-jessie
    
    # HTTP Proxy
    ARG http_proxy
    ARG https_proxy
    ENV http_proxy ${http_proxy}
    ENV https_proxy ${https_proxy}
    
    # Certicate
    ENV CERT_HOME=/usr/local/share/ca-certificates
    ENV CERT_FILE_PATH=${CERT_HOME}/my.crt
    RUN mkdir -p ${CERT_HOME}
    ADD my.crt ${CERT_FILE_PATH}
    RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
    
    # npm settings
    RUN npm config set cafile ${CERT_FILE_PATH}
    RUN npm config set proxy ${http_proxy}
    RUN npm config set https-proxy ${https_proxy}
    
    # Check
    RUN npm config get proxy
    RUN npm config get https-proxy
    RUN npm config get registry
    

    并运行:

    docker build --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy --tag mynode .