2016-01-19 4 views
1

Проблема в том, что API и интерфейс не связаны. Я могу использовать команду --link, когда я запускаю контейнер nginx. Но мне нужно изменить мой nginx.conf.Как создать мой nginx.conf

На данный момент у меня

worker_processes 4; 

events { worker_connections 1024; } 

http { 

     upstream node-app { 
       least_conn; 
       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; 
       } 
     } 
} 

Мой nodejs контейнер имеет --name nodejs и его работает на порту 8888 (-p 8888:8888) Это dockerfile выглядит следующим образом:

FROM node 

# Create app directory 
RUN mkdir -p /usr/src/www 
WORKDIR /usr/src/www 

# copy 
COPY node_modules /usr/src/www/node_modules 
COPY gulpfile.js /usr/src/www/gulpfile.js 
COPY gulp.config.js /usr/src/www/gulp.config.js 
COPY server.js /usr/src/www/server.js 

EXPOSE 8080 
CMD [ "node", "server.js" ] 

я начинаю его :

docker run -d -p 8888:8888 --name nodejs localhost:5000/test/nodejs-image:1 

я могу посетить мой апи на локальном хосте: 8888/апите

Это dockerfile из Nginx (расстояние создается после НОЙ установки и т.д. для углового)

FROM nginx 
COPY dist /usr/share/nginx/html/dist 

Когда я просто выполнить:

docker run -d -p 80:80 --name nginx localhost:5000/test/nginx-image:1 

Я могу посетить мои статические файлы на локальном хосте: 80/DIST/...

Но я должен связать два контейнера + изменить nginx.conf:

docker run -d -p 80:80 --name nginx --link nodejs:nodejs -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf localhost:5000/test/nginx-image:1 

Мой server.js содержит такие вещи, как:

app.post('/api/login', requestProxy({ 
    url: xxx + "/login" 
})); 

Может кто-то исправить мою nginx.conf или есть другая неисправность?

+0

Вы открываете 8080 и работаете с 8888, это ваша проблема? Вы пытались выполнить 'docker exec' в свой nginx и видеть в/etc/hosts, если nodejs заселен (попробуйте ping nodejs)? –

ответ

0

One Изменения: В вашем nginx.conf, изменить proxy_pass http://node-app к proxy_pass http://nodejs:8888

Когда вы связываете conatiner "--link nodejs: nodejs" докер создает и запись в/и т.д./hosts с "conatiner_name container_ip", поэтому вы можете связаться с (ping) связанным контейнером с его именем.

Смежные вопросы