我需要能够在同一个容器中运行:我的nodejs server.js 和 mongodb。
我知道可以使用 docker-compose 或两个单独的容器来实现此目的,但这不是这里的选择。我需要在同一个容器上运行这两个服务。
我的 Dockerfile 是这样的:
FROM node:16
WORKDIR /usr/src/app
RUN apt-get update && apt-get install -y mongodb
COPY package.json ./
RUN npm install
COPY server.js public/ ./
EXPOSE 3000
EXPOSE 27017
CMD service mongodb start && node server.js
然后在某个时候我的 server.js 需要像这样调用 mongodb:
const uri = 'mongodb://172.0.0.1:27017';
但是,当我尝试构建容器时,我得到:
E: Package 'mongodb' has no installation candidate
我不知道你为什么要这样做,你也可以创建两个不同的 Dockerfile,但无论如何。
FROM node:16
# Install MongoDB
RUN apt-get update && \
apt-get install -y wget gnupg && \
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add - && \
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/5.0 main" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list && \
apt-get update && \
apt-get install -y mongodb-org
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY server.js public/ ./
EXPOSE 3000
EXPOSE 27017
CMD service mongod start && node server.js
const uri = 'mongodb://localhost:27017';