我在后端有一个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"
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
****** 更新 ******
我创建了一个网络
$docker network create my-network
我重新定义了我的docker-compose文件
连接到该网络的容器到达其他容器。
所以我有同样的错误。
当我在Kitematic中看到我的后端有这样的ip:
当我在主机文件中看到ip不一样时。
当我使用Kitematic的ip修改我的控制器时,所有工作都有效,但是当我使用Alias时无效
答案 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