通过下面的设置,我可以看到我的网站,但我得到了一个ERR_EMPTY_RESPONSE时,我试图注册。
注册时,我向API.js发出HTTP请求,这将在user.js中创建/更新架构。
这通常在不使用Docker/Nginx时起作用。我试着直接连接到容器映像"mongo“,我尝试了0.0.0.0:27017,但是我觉得我的app.js最初没有连接到Mongodb。
尽管到/main /profile等的路由是有效的。所以我假设app.js是通过index.html调用的
我有一种感觉,这是一件小事,使这个工作,但花了几个小时,我挣扎。我没有使用CORS,因为我使用的是Nginx。我对这些概念非常陌生,但我认为Nginx作为反向代理并不使用CORS?
在docker-compose.yml中,当我将卷的目录更改为不存在的内容时,我仍然可以看到我的网站,好像它什么也不做一样,但是当我删除这个句子时,它给了我一个失败,所以它被调用了。不完全确定卷在此文件中的作用。
docker ps给出了以下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f58507ed0205 meanchat_web "nginx -g 'daemon ..." 55 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp meanchat_web_1
cddfd8180f1b meanchat_node "nginx -g 'daemon ..." 2 hours ago Up 55 seconds 80/tcp, 0.0.0.0:3000->3000/tcp meanchat_node_1
79a013dd4e51 mongo "docker-entrypoint..." 2 hours ago Up 55 seconds 0.0.0.0:27017->27017/tcp meanchat_mongo_1app.js**:**
var mongo= require('mongodb');
//var cors = require('cors');
var mongoose = require('mongoose');
var connect = require('./models/user')
connect.connect('mongodb://localhost/loginapp');
var db = mongoose.connection;user.js**:**
module.exports.connect = function(mongoUri, promiseLib){
var mongoDB = mongoose.connect(mongoUri);
return mongoDB
};DockerFile**:**
### STAGE 1: Build ###
# We label our stage as ‘builder’
FROM node:8.1.4-alpine as builder
COPY package.json package-lock.json ./
## Storing node modules on a separate layer will prevent unnecessary
pm installs at each build
RUN npm i && mkdir /ng-app && cp -R ./node_modules ./ng-app
WORKDIR /ng-app
COPY . .
## Build the angular app in production mode and store the artifacts
in dist folder
RUN $(npm bin)/ng build --prod
### STAGE 2: Setup ###
FROM nginx:1.13.3-alpine
## Copy our default nginx config
COPY nginx/default.conf /etc/nginx/conf.d/
## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*
## From ‘builder’ stage copy over the artifacts in dist folder to default
nginx public folder
COPY --from=builder ./dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]docker-compose.yml**:**
version: '3'
services:
web:
build: ./
ports:
- "80:80"
links:
- node
volumes:
- "./dist :/usr/share/nginx/html"
node:
build: ./
ports:
- "3000:3000"
links:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"main.ts**:**

发布于 2017-12-28 02:13:41
我从撰写输出中可以看出,mongo在您的app.js中没有正确地连接。
将该行connect.connect('mongodb://localhost/loginapp');更改为
connect.connect('mongodb://mongo/loginapp');
然后运行docker-compose build和docker-compose up,它应该连接。
发布于 2017-12-28 02:20:52
图像蒙戈没有连接。
你应该用
connect.connect('mongodb:27017//localhost/db'); 连接到数据库。
发布于 2017-12-28 03:17:21
我尝试了您的两个选项,但结果似乎是一样的,我再次发送输出。就像你提到的那样,我确实做了码头写作和码头写作。
我正在对api执行以下操作,以便将其注册到mongodatabase。
let url = 'http://localhost:3000/api/register';
return this.http.post(url, user)通过从D:/ mongodb /bin文件夹执行mongo://0.0.0.0:27017,我能够连接到容器中的mongodb。它确实给了我这样的警告:数据库没有启用访问控制。
我关闭了防火墙,没有自动取款机激活。
我搜索了我得到的访问控制警告,这似乎意味着我需要在mongodb上创建一个授权帐户?这是必需的,即使当使用猫鼬,没有码头/nginx,我没有这个问题。也许这和mongodb的形象有关吧?
我通过登录到数据库中添加了一个管理帐户:$username$ db.createUser( { user:"username",pwd:"password",roles:{ role:"root",db:" admin“})
mongo:
environment:
- MONGO_INITDB_ROOT_USERNAME=username
- MONGO_INITDB_ROOT_PASSWORD=password
image: mongo
ports:
- "27017:27017"现在,我能够连接到数据库,而不启用acces控件,但是,当我尝试注册时,我仍然得到相同的ERR_empty_response。那么,是否有一种方法可以完全摆脱访问控制,还是必须向猫鼬的模式中添加一些内容,以便当我试图在LoginApp上更改或创建用户时,它正在正确地进行身份验证?
例如,newUser.save现在可能无法工作,因为它需要单独的身份验证?
下面的图片是我现在得到的,但是访问猫鼬数据库仍然不工作。

https://stackoverflow.com/questions/48000788
复制相似问题