Docker撰写链接(别名)

时间:2016-03-17 14:19:13

标签: angularjs docker docker-compose dockerfile

我在后端有一个Angularjs前端和一个Spring-Boot Rest API。 我创建了两个Docker

DockerFile Front:

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

我有一个Docker-Compose文件,我已经定义了Alias

多克尔-撰写:

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


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

enter image description here  我重新定义了AngularJs控制器中的baseURL

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

当我在控制台中使用我的应用程序时,我有这个

错误:

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

其他容器中的hosts文件不会自动更新 enter image description here 怎么了 ?

****** 更新 ******

我创建了一个网络

$docker network create my-network

我重新定义了我的docker-compose文件

连接到该网络的容器到达其他容器。

所以我有同样的错误。

当我在Kitematic中看到我的后端有这样的ip:

enter image description here

当我在主机文件中看到ip不一样时。

enter image description here

当我使用Kitematic的ip修改我的控制器时,所有工作都有效,但是当我使用Alias时无效

3 个答案:

答案 0 :(得分:5)

所以你试图在浏览器(Angular)应用程序中使用链接别名? Docker仅将这些别名公开给容器。您的本地开发系统位于docker网络之外,不会将这些添加到主机文件中,因此无法将主机解析为IP。

在容器内运行的任何应用程序(如Node.js后端)都可以使用这些别名。浏览器不能。

答案 1 :(得分: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  

注意如果您使用docker-compose文件版本2.0。作曲家将为您创建网络。

答案 2 :(得分:0)

您可以尝试在配置文件中链接两个容器。

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


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