Node.js 角度前端Docker容器不';t从node express后端Docker容器发送/接收数据
所以我是码头集装箱 我有一个用Angular编写的前端应用程序 如果proxy.conf.json持有:Node.js 角度前端Docker容器不';t从node express后端Docker容器发送/接收数据,node.js,angular,docker,nginx,dockerfile,Node.js,Angular,Docker,Nginx,Dockerfile,所以我是码头集装箱 我有一个用Angular编写的前端应用程序 如果proxy.conf.json持有: /api": { "target": "http://127.0.0.1:3000", "secure": false } 我还在环境.prod.ts中添加了: export const environment = { production: true, api: 'http://127.0.0.1:3000', }; 最后,我的后端是用Node.js(Expre
/api": {
"target": "http://127.0.0.1:3000",
"secure": false
}
我还在环境.prod.ts
中添加了:
export const environment = {
production: true,
api: 'http://127.0.0.1:3000',
};
最后,我的后端是用Node.js(Express)编写的
在我的app.js
中:
...
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next()
});
...
当我构建我的应用程序,并在正确设置配置文件的情况下将前端添加到Nginx local,并且PM2运行后端时,我的应用程序运行平稳,没有任何问题
因此,根据指南和文档,我为前端创建了一个容器
Dockerfile:
FROM nginx
COPY dist /usr/share/nginx/html
和一个用于我的后端的容器:
# Install the app dependencies in a full Node docker image
FROM node:10
WORKDIR "/app"
# Install OS updates
RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get clean \
&& echo 'Finished installing dependencies'
# Copy package.json and package-lock.json
COPY package*.json ./
# Install app dependencies
RUN npm install --production
# Copy the dependencies into a Slim Node docker image
FROM node:10-slim
WORKDIR "/app"
# Install OS updates
RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get clean \
&& echo 'Finished installing dependencies'
# Install app dependencies
COPY --from=0 /app/node_modules /app/node_modules
COPY . /app
ENV NODE_ENV production
ENV PORT 3000
USER node
EXPOSE 3000
CMD ["npm", "start"]
所以你可能已经猜到了,当我在笔记本电脑上运行这两个容器时(就在我完成docker构建之后),我可以访问它们中的每一个,但是当我尝试登录时,我有一个帖子。。。404错误(未找到)
如果我在本地运行前端,而在容器中运行后端,它就像一个符咒
我在谷歌上搜索了很多,似乎找不到答案
谢谢你的时间和帮助,
干杯
编辑
根据请求,我的Docker运行命令:
docker run -d -p 3000:3000 myUserName/cis-backend
docker run -d -p 4200:80 myUserName/cis-frontend
127.0.0.1在前端容器中指的是它自己。这就解释了为什么它没有连接 尝试使用以下步骤启动 这将启动后端容器并将名称设置为cis后端
docker run -d -p 3000:3000 --name cis-backend myUserName/cis-backend
启动cis前端容器并将其链接到后端容器
docker run -d -p 4200:80 --link cis-backend:cis-backend myUserName/cis-frontend
Syntax for link:
--link <container-name>:<alias>
This will add alias in the /etc/hosts file in the container
docker run-d-p 4200:80——链接cis后端:cis后端myUserName/cis前端
链接的语法:
--链接:是一项传统功能,建议在多容器应用程序中使用 经过几个小时的挫折,我终于明白了。
是的,我的一个问题是我从来没有链接过我的容器,我使用了一个简单的docker composer文件。
但主要的问题是,在我在线阅读的指南中,没有一个说我应该更新容器nginx映像中的default.conf
对于下一个像我一样挣扎的人,这里有一个简单的步骤:
在docker.com中,为后端编写一个特定的名称。在我的例子中,我把它命名为backend。我建议为前端创建一个简单的docker容器,这样您就可以在其中执行(docker exec-it containerId bash)以获取必要的信息,否则可能会使用google默认的.conf nginx docker映像。。。
如果创建快速前端容器只是为了将文件放在以下位置:
/etc/nginx/conf.d/default.conf
安装vim或任何您想要的。。
我使用的简单代码:
apt-get update
apt-get install vim
导航并打开default.conf文件,然后将其复制粘贴到某个位置。
在为前端创建dockerfile的同一文件夹中创建Nginx-custom.conf文件。
复制与在default.conf中找到的信息完全相同的信息
并在位置{..}下添加以下内容
...
location /api/ {
proxy_pass http://nameOfTheBackendContainer:portTheBackendIsRunninG;
# Example: proxy_pass http://backend:3000
proxy_http_version 1.1;
}
...
在docker文件中添加以下复制命令:
COPY nginx-custom.conf /etc/nginx/conf.d/default.conf
现在在前端代码中(请注意其角度),
如果为api使用了proxy.conf.json文件,则需要更改api url。
在我的情况下,它从:
"target": "http://localhost:3000",
到
我希望这能帮助一些新手,像我一样挣扎
请注意,我在这方面绝对不是专业人士。。。事实上,我只是在学习所有的知识,并试图学好它,这可能是一个非常错误的答案,但它对我来说很有效,也许它也将成为其他人的起点。
如果有人需要更多帮助或更好的解释,请随时给我发消息。可以添加docker run命令吗。看起来您可能未链接容器或未公开端口correctly@AvinashReddy,谢谢您的快速重播。我只是按照你的要求进行了编辑。谢谢,我会尝试这个,并在有结果后尽快更新。我尝试了,但不幸的是没有帮助。我修复了environment.prod.ts和proxy.conf.json,使它们都具有:“我还尝试了”构建列表文件。构建docker容器。并使用您提供的命令运行docker容器。同样的404错误。我将花时间阅读您今晚提供的两个链接。查看docker composeCan,您可以将其执行到cis前端容器中,并检查/etc/hosts文件。还可以尝试对CI执行nslookup-backend@AvinashReddy,这是我的主机:127.0.0.1 localhost::1 localhost i[6-localhost ip6环回fe00::0 ip6 localnet ff00::0 ip6 mcastprefix ff02::1 ip6所有节点ff02::2 ip6所有路由器172.17.0.2 cis后端d95c9438d78a 172.17.0.3 196fadb8e93b
"target": "http://backend:3000",