【发布时间】:2019-10-24 12:50:16
【问题描述】:
我正在尝试仅使用 Docker-compose 文件来实现一个简单的 Node.js 应用程序。当我使用命令 docker-compose up 启动 docker 并检查它显示为 restarting 的正在运行的容器时,我有点困惑,但没有任何反应。
我想只使用docker-compose.yml 文件而不使用Dockerfile 来实现这个Node.js 应用程序。网络中的大多数示例都是使用单独的Dockerfile for Node.js 来构建图像,并且该图像已被docker-compose.yml 文件用于创建容器。
我对@987654328@ 进行了同样的尝试,它对我来说非常有效。但是当我删除这个Dockerfile 并只使用docker-compose.yml 文件时,我遇到了restarting 问题:
Error response from daemon: Container a7fe8cdc262ae6c57e33b60b1a69084df1313e590 is restarting, wait until the container is running
docker-compose.yml文件:
version: '3'
services:
db:
build: ./db
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: mypass
MYSQL_USER: mysql
MYSQL_PASSWORD: mypass
DATABASE_HOST: myhost
web:
image: node:8
volumes:
- ./web:/usr/src/app
working_dir: /usr/src/app
command: bash -c "npm run start && tail -F"
depends_on:
- db
restart: on-failure
我的index.js 文件:
//Make NodeJS to Listen to a particular Port in Localhost
const port = process.env.PORT || 9000;;
app.listen(port, function(){
// Start the server and read the parameter passed by User
console.log("Node js is Running on : "+port);
// Get process.stdin as the standard input object.
var standard_input = process.stdin;
// Set input character encoding.
standard_input.setEncoding('utf-8');
// Prompt user to input data in console.
console.log("Please input text in command line.");
// When user input data and click enter key.
standard_input.on('data', function (data) {
console.log(" DATA ENTERED BY USER IS :"+data);
});
});
我之前尝试删除的 Node.js Dockerfile:
FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 9000
CMD ["npm","start"]
CMD tail -f /dev/null
【问题讨论】:
-
似乎直接在主机上运行 Node 会容易得多。您可以在主机上使用 Node 并在容器中使用数据库,这对您来说更有用。
-
你怎么从
tail -f /dev/null变成tail -F?
标签: node.js docker docker-compose dockerfile docker-swarm