我正在尝试将我的angular + express应用程序码头化。我有一个可以创建两个容器的docker-compose文件,并且可以从主机(使用浏览器)访问这些容器,但是只要我尝试从http中访问后端,我都会得到一个“ ERR_NAME_NOT_RESOLVED”我的前端提出的请求。
我已经查找了这个问题,并且似乎大多数建议服务名称和容器端口应该足以在其他容器位于同一网络上时击中另一个容器。我尝试打“ http://express:8000/user?user=030f0e70-9a8f-11e9-b5d1-f5cb6c0f3616”,考虑到从其他地方看到的内容,我认为它应该可以工作,但是无论如何,我都会遇到相同的错误。
我的docker-compose文件看起来像
version: '3' # specify docker-compose version
# Define the services/containers to be run
services:
angular: # name of the first service
build: ./ # specify the directory of the Dockerfile
ports:
- "4200:80" # specify port forewarding
links:
- "express"
depends_on:
- "express"
express: #name of the second service
build: # specify the directory of the Dockerfile
context: ./
dockerfile: dockerfile.be
ports:
- "8000:8000" #specify ports forewarding
expose:
- "8000"
理想情况下,我希望我的前端能够通过设置的终结点访问另一个容器,因此我可以以最小的更改来部署应用程序。我将不胜感激任何建议。我感觉好像缺少了一些非常简单的东西,但是经过几个小时的修补,我仍然没有抓住它。
谢谢!
答案 0 :(得分:1)
事实上,您的流量排在第二位:
来自angular container
的用户浏览器请求页面,然后所有页面都将呈现给用户的浏览器。
使用angular HttpClient
从express contaner
获取数据的前端javascript代码。
当时,尽管docker-compose
为您建立了一个自定义网络,该网络可以使自动dns解析angular
和express
,但是此dns仅在容器中起作用,而对主机无效
但是,您调用augular HttpClient
的{{1}}发生在不在容器中的用户浏览器中,因此auto-dns肯定无法为您解析名称http://express
。
对于您来说,如果您只想从docker主机打开浏览器,则可以使用express
,但是如果您还希望其他计算机上的用户访问您的网络,则必须使用您的ip dockerhost。
然后,在localhost
中,您需要使用angular HttpClient
之类的东西来访问快递集装箱。
如果有兴趣,您可以访问this来查看http://your_dockerhost_ip:8000
。
答案 1 :(得分:0)
几件事:
在撰写文件中添加自定义网络,而不使用链接。现在,这是network containers together的主要方式:
if
答案 2 :(得分:0)
**sample docker-compose.yaml**
version: '3.5'
services:
angular:
image: "angular-alpine:0.0.1"
container_name: angular
tty: true
stdin_open: true
networks:
app_net:
ipv4_address: 172.16.238.05
depends_on:
- express
express:
image: "express:0.0.1"
container_name: express
tty: true
stdin_open: true
networks:
app_net:
ipv4_address: 172.16.238.10
networks:
app_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
>“ 1。Angular将在172.16.238.05:4200上运行,而express将在172.16.238.10:some-port上运行。 2.修改您的config.ts或parameter.ts或在其中配置Express URL的任何文件到172.16.238.10:some-port。现在您的角度将连接到表达。”