我有一个与快速服务器通信的角度应用程序。我已将角度应用程序链接到快速服务器。我可以ping角度容器内的链接,但在代码中使用时会显示错误。
Docker撰写文件
myexpress:
build: express-server
links:
- "mymongodb:mongo"
ports:
- "8080:3000"
angular:
build: angular
links:
- "myexpress:express"
ports:
- "4200:4200"
我可以在http://localhost:4200/访问该应用程序。 http调用的代码片段是:
return this.http.post('http://express:3000/signup', body, {headers: headers})
.map((response: Response) => response.json())
.catch((error: Response) => Observable.throw(error.json()));
如何从角形容器访问链接?
答案 0 :(得分:1)
容器之间的通信通过其主机名进行。默认情况下,服务名称被视为主机名,因此您应使用extends
连接到{'active_menu': 'index'}
。
此外,您可以单独指定主机名。更多详情here。
答案 1 :(得分:0)
我认为你错过了撰写文件中的 container_name 选项。
myexpress:
build: express-server
container_name: myexpress
links:
- "mymongodb:mongo"
ports:
- "8080:3000"
angular:
build: angular
links:
- "myexpress:express"
ports:
- "4200:4200"
答案 2 :(得分:0)
这是旧的,但是我正在使用类似的工具,但我意识到我的浏览器正在主机中运行,而不是在任何服务的容器中。
然后主机无权访问快速域,因为该域位于Docker网络中而不是主机网络中
我为nginx创建了一个配置来处理此问题,希望这可以对某人有所帮助:
// default environment
export const environment = {
production: false,
apiUrl: 'http://localhost:3000' // this is for development purpose
};
// prod environment
// used when build is created for the docker image
export const environment = {
production: true,
apiUrl: '' // empty string: for the api redirection @fallback conf
};
// angular service
urlBase = `${environment.apiUrl}/apiEndpoint`;
findById(id){
let headers = new HttpHeaders( { 'Content-Type': 'application/json'});
let request = this.http.get( `${this.urlBase}/${id}`, {headers: headers});
return request.toPromise();
}
//nginx.conf
server {
listen 80;
location / {
#serve angular built
root /usr/share/nginx/html;
index index.html index.htm;
#try files, if a path fails in angular then the fallback is used
try_files $uri $uri/index.html @fallback;
}
#fallback for express redirect
location @fallback{
#set the backend fallback, this will send requests to express container
#in the frontend baseUrl should be empty
proxy_pass http://express:3000; #set the backend service domain here
}
}
此外,这两个服务都应该属于同一网络,并且您必须将Nginx配置安装到Web容器中
version: "3"
networks:
mean:
services:
web:
build: client
image: mean-frontend
ports:
- "80:80"
depends_on:
- express
networks:
- mean
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
restart: always
express:
build: server
image: mean-backend
ports:
- "3000:3000"
depends_on:
- mongo
environment:
WAIT_HOSTS: mongo:27017
networks:
- mean
mongo:
image: mongo
restart: always
volumes:
- ./dbData:/data/db
networks:
- mean
最后,浏览器将调用angular应用,当angular中的路径无效时,回退将使用docker网络将调用重定向到快递服务