2016-03-17 5 views
0

У меня есть интерфейс Angularjs и API загрузки Spring-Boot в бэкэнд. У меня есть создать два DockerDocker Compose Link (Псевдоним)

DockerFile фронт:

FROM httpd:2.4 
COPY ./public-html/ /usr/local/apache2/htdocs/ 

DockerFile Назад:

FROM tomcat:8.0 
EXPOSE 8080 
COPY rest-api.war /usr/local/tomcat/webapps/rest-api.war 

У меня есть Докер-Compose файл, я должен определить псевдоним

Докер-Compose:

rest: 
image: restapi 
container_name: restapi 
ports: 
    - "8080:8080" 


frontend: 
image: frontend 
container_name: frontend 
ports: 
    - "80:80" 

enter image description here я redifine в baseURL в мой контроллер AngularJs

app.controller('MainCtrl', function ($scope, $location, $http, MainService) { 
    var that = this; 
    var baseUrl = 'http://rest:8080'; 

когда я lauchn мое приложение в консоли у меня есть этот

Ошибка:

GET http://rest:8080/category net::ERR_NAME_NOT_RESOLVED 

хосты файлы в других контейнерах не обновляется автоматически enter image description here Что не так?

****** UPDATE ******

У меня есть создать сеть

$docker network create my-network 

У меня есть переопределить мой докер-Compose файл

Контейнер подключенные к этой сети, попадают в другие контейнеры.

У меня такая же ошибка.

Когда я вижу в Kitematic мой Backend есть внутрибрюшинно вроде этого:

enter image description here

И когда я вижу в хостах файлы IP-это не то же самое.

enter image description here

Когда я изменить мой контроллер с ф из Kitematic все работает, но когда я использую псевдоним не работает

+0

Добавить: 'ссылки: - отдых' на ваш сайт-докер-компоновку yml-раздела –

+0

Уважаемые господа, если вы используете нижний план, пожалуйста, дайте хотя бы небольшой комментарий, как мой ответ может быть улучшен. – Mercer

+0

Я думаю, что это происходит из того факта, что вы спрашивая о ссылках и псевдонимах, в то время как фактическая проблема возникает из-за попытки доступа к внутреннему IP-адресу контейнера Docker из-за хоста Docker. Заголовок вопроса о ссылках, актуальная проблема заключается в непонимании того, как Docker создает (виртуальные) сети. – arvidkahl

ответ

0

При создании новой сети, любой контейнер подключен к этой сети может достигать другие контейнеры от их имени или имени службы.

создание сети

$docker network create your-network 

Докер-compose.yml

rest: 
image: restapi 
container_name: restapi 
ports: 
    - "8080:8080" 
net: your-network 


frontend: 
image: frontend 
container_name: frontend 
ports: 
- "80:80" 
net: your-network 

Примечание если вы используете Докер-Compose файл версии 2.0. композитор создаст для вас сеть.

+0

Как узнать версию файла docker-compose? – Mercer

+0

В настоящее время вы используете формат файла Compose - версия 1 (устаревший формат, который не поддерживает тома или сети). Узнайте больше о различиях между версиями 1 и 2 на странице: https://docs.docker.com/compose/compose-file/#versioning –

0

Вы можете попробовать и связать два контейнера в файле конфигурации.

rest: 
image: restapi 
container_name: restapi 
ports: 
    - "8080:8080" 


frontend: 
image: frontend 
container_name: frontend 
ports: 
    - "80:80" 
links: 
    - rest 
+0

есть ли вам пример ..? – Mercer

+0

'← [31mERROR ← [0m: Круговой импорт между интерфейсом и отдыхом – Mercer

+0

Можете ли вы попробовать сейчас? – DaKnOb

5

Итак, вы пытаетесь использовать связанный псевдоним внутри своего браузера (Угловое) приложение? Докер только предоставляет эти псевдонимы контейнерам. Ваша локальная система разработки, находящаяся за пределами сети докеров, не будет иметь эти дополнения к файлу хоста и, следовательно, не сможет разрешать хосты для IP-адресов.

Любое приложение, запущенное внутри контейнеров, подобно серверу Node.js, сможет использовать эти псевдонимы. Браузеры не могут.

+1

ОК, так как я могу узнать ip-адрес.? – Mercer

+0

Ваш браузер сможет подключаться только к внешнему IP-адресу вашего докере-хоста (тот, который вы получаете от запуска 'docker-machine ip' в терминале) или что-то, что вы добавили в свой собственный файл'/etc/hosts' вручную. Внутренний IP-адрес ваших индивидуальных контейнеров не будет доступен извне, то есть по дизайну. – arvidkahl

+0

Просто представьте себе: если бы вы запустили браузер ВНУТРИ виртуальной машины хоста Docker, вы могли бы получить доступ к внутренним IP-адресам и даже псевдонимам хостов. Поскольку вы запускаете свой браузер на удаленном хосте Docker, вы не можете получить к ним доступ. – arvidkahl