How-to 运行 一个 node.js docker 实例落入一个 shell 是自动跟踪日志
How-to run a node.js docker instance dropping into a shell that is auto-tailing logs
所以...
我正在尝试为我的团队在新建原型项目中创建优雅的 docker / 节点设置。我的团队需要事先安装 Node / NPM 和 Docker CLI,但之后我将使用 NPM 来管理所有内容并且之前已经...
"scripts": {
"docker": "npm run docker-build && npm run docker-start",
"docker-build": "docker build -t docker_foo .",
"docker-start": "docker run -it -p 8080:8080 --rm docker_foo",
"start": "node server.js"
}
...并且 Docker 文件包含 CMD...
# Other stuff...
EXPOSE 8080
CMD ["npm", "start"]
...最终将启动节点服务器。这对于查看日志和清理容器非常有效,但我想让它变得更好。我想改为使用 -d 选项在后台启动容器并附加到容器,而不是使用跟踪日志的初始命令来模拟相同的行为,除了当用户终止进程时,它们仍在容器中所以他们可以评估容器的当前状态。这让我有...
"scripts": {
"docker": "npm run docker-build && npm run docker-start && npm run docker-attach",
"docker-build": "docker build -t docker_foo .",
"docker-start": "docker run -d -p 8080:8080 --name docker_foo docker_foo",
"docker-attach": "docker exec -it docker_foo /bin/ash",
"docker-clean": "npm run docker-clean-containers && npm run docker-clean-images",
"docker-clean-containers": "docker ps -a -q | xargs docker rm -f -v",
"docker-clean-images": "docker images -f 'dangling=true' -q | xargs docker rmi",
"start": "node server.js"
}
...但是我在查找节点服务器日志存储在容器或我的本地主机上的位置时遇到了一些麻烦,以启用此所需的工作流。是否有某种方法可以出于历史目的将 STD 重新定向到容器内的某个位置,以及是否可以扩展我上面的附加命令以最初跟踪这些日志?
我最后做的只是在后台启动节点服务器...
"scripts": {
"prebuild": "npm run clean",
"build": "docker build -t docker_foo .",
"clean": "npm run clean:containers && npm run clean:images && npm run clean:volumes",
"clean:containers": "docker ps -a -q | xargs docker rm -f -v",
"clean:images": "docker images -f 'dangling=true' -q | xargs docker rmi",
"clean:volumes": "docker volume ls -qf dangling=true | xargs docker volume rm",
"prerun": "npm run build",
"run": "docker run -d -p 8080:8080 --name docker_foo -v $(pwd)/app:/usr/src/docker_foo/app -v $(pwd)/test:/usr/src/docker_foo/test docker_foo",
"start": "nodemon --watch app server.js",
"logs": "docker logs -f admin_api",
"pretest": "npm run build",
"test": "docker run -p 8080:8080 --name docker_foo -it --rm docker_foo node_modules/.bin/istanbul cover node_modules/.bin/_mocha",
"prewatch": "npm run run",
"watch": "docker exec -it docker_foo node_modules/.bin/nodemon --exec \"node_modules/.bin/_mocha -w\""
}
...所以我可以 运行 "npm run run" 它会 运行 我的 docker 实例在后台,服务文件系统覆盖我自己的主机由 nodemon 监视文件更改以快速开发应用程序,然后我可以 运行 "npm run logs" 在开发过程中跟踪日志。
或者,我现在可以 运行 "npm run watch" 清理、重新构建 docker 图像/容器/卷,并 运行 使用 nodemon 监视以重新启动server 和 mocha 看着 app 和 test 目录重新 运行 测试并不断输出结果到 window。
所以...
我正在尝试为我的团队在新建原型项目中创建优雅的 docker / 节点设置。我的团队需要事先安装 Node / NPM 和 Docker CLI,但之后我将使用 NPM 来管理所有内容并且之前已经...
"scripts": {
"docker": "npm run docker-build && npm run docker-start",
"docker-build": "docker build -t docker_foo .",
"docker-start": "docker run -it -p 8080:8080 --rm docker_foo",
"start": "node server.js"
}
...并且 Docker 文件包含 CMD...
# Other stuff...
EXPOSE 8080
CMD ["npm", "start"]
...最终将启动节点服务器。这对于查看日志和清理容器非常有效,但我想让它变得更好。我想改为使用 -d 选项在后台启动容器并附加到容器,而不是使用跟踪日志的初始命令来模拟相同的行为,除了当用户终止进程时,它们仍在容器中所以他们可以评估容器的当前状态。这让我有...
"scripts": {
"docker": "npm run docker-build && npm run docker-start && npm run docker-attach",
"docker-build": "docker build -t docker_foo .",
"docker-start": "docker run -d -p 8080:8080 --name docker_foo docker_foo",
"docker-attach": "docker exec -it docker_foo /bin/ash",
"docker-clean": "npm run docker-clean-containers && npm run docker-clean-images",
"docker-clean-containers": "docker ps -a -q | xargs docker rm -f -v",
"docker-clean-images": "docker images -f 'dangling=true' -q | xargs docker rmi",
"start": "node server.js"
}
...但是我在查找节点服务器日志存储在容器或我的本地主机上的位置时遇到了一些麻烦,以启用此所需的工作流。是否有某种方法可以出于历史目的将 STD 重新定向到容器内的某个位置,以及是否可以扩展我上面的附加命令以最初跟踪这些日志?
我最后做的只是在后台启动节点服务器...
"scripts": {
"prebuild": "npm run clean",
"build": "docker build -t docker_foo .",
"clean": "npm run clean:containers && npm run clean:images && npm run clean:volumes",
"clean:containers": "docker ps -a -q | xargs docker rm -f -v",
"clean:images": "docker images -f 'dangling=true' -q | xargs docker rmi",
"clean:volumes": "docker volume ls -qf dangling=true | xargs docker volume rm",
"prerun": "npm run build",
"run": "docker run -d -p 8080:8080 --name docker_foo -v $(pwd)/app:/usr/src/docker_foo/app -v $(pwd)/test:/usr/src/docker_foo/test docker_foo",
"start": "nodemon --watch app server.js",
"logs": "docker logs -f admin_api",
"pretest": "npm run build",
"test": "docker run -p 8080:8080 --name docker_foo -it --rm docker_foo node_modules/.bin/istanbul cover node_modules/.bin/_mocha",
"prewatch": "npm run run",
"watch": "docker exec -it docker_foo node_modules/.bin/nodemon --exec \"node_modules/.bin/_mocha -w\""
}
...所以我可以 运行 "npm run run" 它会 运行 我的 docker 实例在后台,服务文件系统覆盖我自己的主机由 nodemon 监视文件更改以快速开发应用程序,然后我可以 运行 "npm run logs" 在开发过程中跟踪日志。
或者,我现在可以 运行 "npm run watch" 清理、重新构建 docker 图像/容器/卷,并 运行 使用 nodemon 监视以重新启动server 和 mocha 看着 app 和 test 目录重新 运行 测试并不断输出结果到 window。