首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么没有启动文件中描述的所有容器?

为什么没有启动文件中描述的所有容器?
EN

Stack Overflow用户
提问于 2022-08-12 12:06:52
回答 1查看 187关注 0票数 -2

我有下面的docker-compose.yml

代码语言:javascript
复制
version: '2'

services:
  db:
    image: postgres
    container_name: postgres
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: mypassword
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
    ports:
      - 5432:5432
    volumes:
      - ./data/db:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: unless-stopped
    ports:
      - 8080:8080

  nginx-reverse-proxy:
    image: nginx:1.19.8
    container_name: reverse-proxy-container
    volumes:
      - ./proxy/config:/etc/nginx
    restart: unless-stopped
    ports:
      - 8000:8000

  sheet-service:
    image: sheetservice:latest
    build:
      context: ./microservices/sheet-service
      dockerfile: Dockerfile
    container_name: sheet-service
    restart: unless-stopped
    ports:
      - 3002:3002
    depends_on:
      - "db"
      - "nginx-reverse-proxy"

当使用命令sheet-service执行停靠脚本时,只有docker-compose up --build容器才会启动。当我通过键入docker ps -a检查正在运行的进程时,输出显示如下

。奇怪的是,容器的名称不是docker-compose.yml中指定的docker-compose.yml

Dockerfile of sheet-service

代码语言:javascript
复制
FROM node:14.15.0

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm ci --only=production

COPY . .

RUN npm run start

脚本的起始日志:

代码语言:javascript
复制
> docker-compose up --build
Building sheet-service
Sending build context to Docker daemon  73.29MB
Step 1/6 : FROM node:14.15.0
 ---> b90fa0d7cbd1
Step 2/6 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 6ce9a5a77956
Step 3/6 : COPY package*.json ./
 ---> Using cache
 ---> d9c528ab2b74
Step 4/6 : RUN npm ci --only=production
 ---> Using cache
 ---> 221d8f411055
Step 5/6 : COPY . .
 ---> Using cache
 ---> 025dba9ebb44
Step 6/6 : RUN npm run start
 ---> Running in 84c8c1b8a9d8

> sheet-service@1.0.0 start /usr/src/app
> node src/index.js

Server running on port 3002!

如果我注释掉定义sheet-service的行,如下所示

代码语言:javascript
复制
version: '2'

services:
  db:
    image: postgres
    container_name: postgres
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: mypassword

      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
    ports:
      - 5432:5432
    volumes:
      - ./data/db:/var/lib/postgresql/data

  adminer:
    image: adminer
    restart: unless-stopped
    ports:
      - 8080:8080

  nginx-reverse-proxy:
    image: nginx:1.19.8
    container_name: reverse-proxy-container
    volumes:
      - ./proxy/config:/etc/nginx
    restart: unless-stopped
    ports:
      - 8000:8000

  # sheet-service:
  #   image: sheetservice:latest
  #   build:
  #     context: ./microservices/sheet-service
  #     dockerfile: Dockerfile
  #   container_name: sheet-service
  #   restart: unless-stopped
  #   ports:
  #     - 3002:3002
  #   depends_on:
  #     - "db"
  #     - "nginx-reverse-proxy"

所有其他容器都成功启动。为什么sheet-service停止其他容器的运行,以及为什么它显示的名称与指定名称不同?

如果我用docker-compose run container_name一个接一个地运行容器,那么所有容器都会在没有错误或警告的情况下成功启动。

docker-compose config

代码语言:javascript
复制
services:
  adminer:
    image: adminer
    ports:
    - published: 8080
      target: 8080
    restart: unless-stopped
  db:
    container_name: postgres
    environment:
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: mypassword
      POSTGRES_USER: postgres
    image: postgres
    ports:
    - published: 5432
      target: 5432
    restart: unless-stopped
    volumes:
    - /home/myuser/Coding/myproject/data/db:/var/lib/postgresql/data:rw
  nginx-reverse-proxy:
    container_name: reverse-proxy-container
    image: nginx:1.19.8
    ports:
    - published: 8000
      target: 8000
    restart: unless-stopped
    volumes:
    - /home/myuser/Coding/myproject/proxy/config:/etc/nginx:rw
  sheet-service:
    build:
      context: /home/myuser/Coding/myproject/microservices/sheet-service
      dockerfile: Dockerfile
    container_name: sheet-service
    depends_on:
      db:
        condition: service_started
      nginx-reverse-proxy:
        condition: service_started
    image: sheetservice:latest
    ports:
    - published: 3002
      target: 3002
    restart: unless-stopped
version: '2'

Docker version 20.10.7, build f0df350 docker-compose version 1.29.1, build c34c88b2 Ubuntu 16.04.7 LTS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 13:26:18

你的文件..。

代码语言:javascript
复制
FROM node:14.15.0

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm ci --only=production

COPY . .

RUN npm run start

..。包含最后一行RUN npm run start。此RUN指令是作为对接映像构建的一部分执行的,并启动节点服务器--然后构建将在保持运行时“挂起”,从而导致对接器中的后续步骤不会启动(没关系完成)。

我假定您的意思是将节点进程作为实际码头容器启动进程的一部分执行,因此您应该将RUN npm run start行更改为ENTRYPOINT npm run start,因为这将使节点启动进程在容器启动时执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73333948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档