Hi Dockerized了一个reactjs和expressjs项目,当我写了单独的docker compose文件时,一切都很好。
但现在我写了一个组成文件
docker-compose-all-dev.yml
文件
version: '3.7'
services:
client:
container_name: react-dev
build:
context: ./client
dockerfile: Dockerfile.react-dev
ports:
- 3000:3000
server:
container_name: server-dev
build:
context: ./server
dockerfile: Dockerfile.server-dev
ports:
- 5000:5000
现在它只运行客户端服务器,为什么不运行后端服务器呢?
但当我在这样的两个不同文件中运行它时,它就可以工作了。
docker-compose-client.yml
文件:
version: '3.7'
services:
client:
container_name: react-dev
build:
context: ./client
dockerfile: Dockerfile.react-dev
ports:
- 3000:3000
和docker-compose-server.yml
文件
version: '3.7'
services:
server:
container_name: server-dev
build:
context: ./server
dockerfile: Dockerfile.server-dev
ports:
- 5000:5000
有人能告诉我,当我在一个compose文件中运行时,不同时运行这两个应用程序可能会出现什么问题吗?我该怎么解决?
供您参考。
我的Dockerfile-server-dev
文件
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
和我的Dockerfile.react-dev
文件
FROM node:14.1-alpine as build
WORKDIR /app
COPY . /app
ENV PATH /app/node_modules/.bin:$PATH
RUN yarn config delete proxy
Run npm config rm proxy
RUN npm config rm https-proxy
RUN npm install
RUN npm start
我不知道实际在一个docker中运行两个开发服务器组成文件的问题是什么
至少有一些问题,您的Dockerfile.react-dev
缺少入口点和CMD部分,您不应该使用RUN子句启动服务器。相反,使用Entrypoint和CMD来启动它。另一个问题是,您在Dockerfile-server-dev
上暴露的端口与在撰写文件上暴露的不同。
解决了这个问题。
我只是添加了这一行:CMD ["npm", "start"]
并删除了npm start
,现在它正在中工作