我有一个带有angular和nodejs的回购。 我在詹金斯演出:
# install globally
npm install -g bower
npm install -g gulp
# install
bower install
npm install
# build dist folder
gulp build
现在我已经扎根了:
Dockerfile.nginx Dockerfile.nodejs README.md bower.json dist gulp.config.js gulpfile.js node_modules package.json server.js src
我正在复制我的nginx容器中的dist文件夹。所以我主持角度。 (使用dockerfile)
FROM nginx
# copy folder
COPY dist /usr/share/nginx/html/dist
我正在将gulp.config.js gulpfile.js node_modules server.js
复制到我的nodejscontainer。 (还有一个dockerfile)
FROM node
# Create app directory
RUN mkdir -p /usr/src/www
WORKDIR /usr/src/www
# copy
COPY node_modules /usr/src/www/
COPY gulpfile.js /usr/src/www/
COPY gulp.config.js /usr/src/www/
COPY server.js /usr/src/www/
EXPOSE 8080
CMD [ "node", "server.js" ]
我运行了2个容器,但是nginx没有与nodejs进行通信
EDIT1: 启动容器:
docker run -d -p 8888:8888 --name "nodejs" localhost:5000/test/nodejs:1
docker run -d -p 80:80 --name "nginx" localhost:5000/test/nginx:1
EDIT2:我的nginx.conf看起来像这样:
http {
upstream node-app {
least_conn;
server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location /dist {
alias /usr/share/nginx/html/dist/;
}
location ~* /api {
#location / {
proxy_pass http://node-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
我的server.js看起来像:
app.get('/api/hello', requestProxy({
url: xxx + "/hello"
}));
答案 0 :(得分:2)
您需要公开nginx(angular)容器将连接到的node.js容器的端口。 请参阅docker文档的Connect using network port mapping部分。
更新:我认为,您需要将nginx配置文件配置到节点容器中。 This question包含与您的用例相关的示例nginx文件(尽管与容器无关)。
编辑:要使用nginx映射节点应用程序,首先需要将节点容器与nginx容器链接。
docker run -d -p 80:80 --name "nginx" --link nodejs:nodejs localhost:5000/test/nginx:1
当您将节点容器与nginx容器链接时,节点容器的地址将保存在/ etc / hosts中。因此,nginx容器可以从那里访问节点的地址。
因此,在nginx配置文件中,nodejs可以作为nodejs'容器地址:
http {
upstream node-app {
server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://node-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
答案 1 :(得分:1)
一个解决方案是link @manish's answer中描述的两个容器。
但请注意,这是将容器连接在一起的传统方式。
从现在开始,您可以使用new docker network feature 创建虚拟网络并将两个容器连接到该网络:
docker network create mynetwork
docker run -d --net=mynetwork -p 8888:8888 --name "nodejs" localhost:5000/test/nodejs:1
docker run -d --net=mynetwork -p 80:80 --name "nginx" localhost:5000/test/nginx:1
使用这样的设置,您的nginx配置文件必须使用
server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s;
因为你现在用他们的名字来引用其他容器。