尝试在网络中运行角度http请求时,容器别名不起作用

时间:2018-02-20 18:13:09

标签: angularjs docker docker-compose

我有一个docker compose yml文件,包含3个服务。 Spring Boot REST服务,mysql服务和角度应用程序:

version: '3'
services:
container-mysql:
    image: mysql
    environment:
        MYSQL_ROOT_PASSWORD: mypassword
    container_name: container-mysql
container-angular-app:
    build: angularjsapp
    ports:
    - '80:80'
    depends_on:
    - container-app
    container_name: container-angular-app
container-app:
    build: ../workspace/ContainerBackendBoot
    depends_on:
    - container-mysql
    ports:
    - '8080:8080'
    container_name: container-app

我可以通过将application.properties db url设置为

来从我的REST服务连接到我的mysql实例
spring.datasource.url=jdbc:mysql://container-mysql:3306/db?createDatabaseIfNotExist=true

但是当我尝试从角度调用我的REST服务时:

var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope, $http) {
$http({
  method: 'GET',
  url: 'http://container-app:8080/container'
}).then(function successCallback(response) {
        $scope.greeting = response.data;
  }, function errorCallback(response) {
     $scope.greeting = "Failed to connect to backend. Double check your network.";
  });
});

我在Chrome中遇到GET http://container-app:8080/container net :: ERR_NAME_NOT_RESOLVED错误。

为什么我无法使用“container-app”别名从angular连接到我的REST服务?

2 个答案:

答案 0 :(得分:0)

你错过了docker-compose.yml

上的链接

需要添加类似这样的内容

链接:        - container-app

答案 1 :(得分:0)

您在前端使用角度,然后在浏览器中打开您的网站,然后您无法从浏览器访问容器名称。

如果要在另一个容器中提及容器名称,则必须使用容器名称。例如,当您想在另一个应用容器中使用Redis容器时。

在前端,您必须使用应用中公开的IP和端口。