通过以下设置,我可以看到我的网站,但是当我尝试注册时,我收到了ERR_EMPTY_RESPONSE。
当我注册时,我正在向API.js发出HTTP请求 在user.js中创建/更新Schema 这通常在不使用Docker / nginx时有效。 我尝试连接到容器Image" mongo"直接,我试过0.0.0.0:27017 ,但我感觉我的app.js最初并没有连接到Mongodb。 即使路由到/ main / profile等也有效。所以我假设app.js已通过index.html
调用我觉得做这项工作是一件小事,但现在花了几个小时我才挣扎。我不使用cors,因为我使用的是nginx。我对这些概念很陌生,但我认为nginx作为反向代理并不使用cors?
在docker-compose.yml中,当我将Volume的目录更改为不存在的内容时,没有任何更改我仍然可以看到我的网站,就好像它没有做任何事情,但是当我删除它给我一个失败的句子,所以它被调用。不完全确定卷在此文件中的作用。
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_1
app.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
答案 0 :(得分:1)
我可以从撰写输出中看到mongo未在app.js
中正确连接。
将此行connect.connect('mongodb://localhost/loginapp');
更改为
connect.connect('mongodb://mongo/loginapp');
然后运行docker-compose build
和docker-compose up
,它应该连接。
答案 1 :(得分:0)
图像mongo未连接。
你应该使用
connect.connect('mongodb:27017//localhost/db');
连接数据库。
答案 2 :(得分:0)
我尝试了两个选项,但结果似乎相同,我再次发送了输出。我确实如你所提到的那样做了docker-compose build和docker-compose。
我正在执行以下操作来访问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上创建一个授权帐户? 甚至在使用Mongoose时也是如此,没有docker / nginx我没有这个问题。也许这与mongodb的形象有关?
我通过登录数据库添加了一个管理员帐户: $ use loginapp $ db.createUser( { 用户:“用户名”, pwd:“密码”, 角色:[{role:“root”,db:“admin”}] })
mongo:
environment:
- MONGO_INITDB_ROOT_USERNAME=username
- MONGO_INITDB_ROOT_PASSWORD=password
image: mongo
ports:
- "27017:27017"
现在我能够连接到数据库而没有启用访问控制消息,但是当我尝试注册时,我仍然得到相同的ERR_empty_response。那么有没有办法完全摆脱访问控制,或者我是否必须在mongoose的架构中添加一些内容,以便当我尝试在LoginApp上更改或创建用户时,它是否正确进行身份验证?
newUser.save forinstance现在可能无法正常工作,因为它需要单独的身份验证?
下面的图片是我现在得到的,但是到mongoose数据库的访问仍然不起作用。