1. 程式人生 > 其它 >docker容器內安裝pm2

docker容器內安裝pm2

Dockerfile

ARG NODE6_VERSION
FROM ${NODE6_VERSION}

ARG TZ
ARG NODE6_VERSION
ARG CONTAINER_PACKAGE_URL

# 修改映象源
RUN if [ "${CONTAINER_PACKAGE_URL}" != "" ]; then \
        sed -i "s/dl-cdn.alpinelinux.org/${CONTAINER_PACKAGE_URL}/g" /etc/apk/repositories; \
    fi

# 解決could not get uid/gid問題,https://www.jianshu.com/p/d460ec3c693f
RUN npm config set unsafe-perm true
# 安裝指定版本,解決與node和npm的版本相容問題
RUN npm install [email protected] -g

WORKDIR /www

.env檔案

#
# Node 6
#
NODE_VERSION=6.11.3-alpine

#
# 時區
#
TZ=Asia/Shanghai

#
# 映象源地址
#
# 可以為空,可選項如下:
# mirrors.163.com
# mirrors.aliyun.com
# mirrors.ustc.edu.cn
#
CONTAINER_PACKAGE_URL=mirrors.aliyun.com

docker-compose.yml

node6:
    build:
      context: ./node6
      args:
        NODE6_VERSION: node:${NODE_VERSION}
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        TZ: "$TZ"
    container_name: node6
    deploy:
      resources:
        limits:
          cpus: '0.10'
          memory: 2G
    environment:
      - NODE_ENV=production
    volumes:
      - ${SOURCE_DIR}:/www/:rw
    expose:
      - "3000"
    stdin_open: true
    tty: true
    # 容器內使用pm2-runtime,而不是pm2,參考https://stackoverflow.com/questions/55936473/docker-exits-with-code-0-when-using-pm2-start
    command: pm2-runtime start npm --name 'fun' -- run start
    networks:
      my_net:
        ipv4_address: 172.18.0.8

pm2啟動命令pm2-runtime

這裡注意容器內使用pm2-runtime,不能用pm2,否則報

Docker exits with code 0 when using pm2 start

原因在於pm2是後臺執行,docker容器不知道pm2應用的啟動,使用pm2-runtime可以進行前端執行,請檢視stackoverflow

參考