我正在尝试使用docker-compose
和Traefik部署三项服务:
version: '3.5'
services:
reverse-proxy:
image: traefik
command: --web --docker --logLevel=INFO
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.frontend.rule=Host:traefik.localhost"
- "traefik.port=8080"
db:
build: ./db
environment:
- MONGO_INITDB_DATABASE=example
volumes:
- ./volumes/db:/data/db
restart: always
labels:
- "traefik.enable=false"
api:
build: ./api
environment:
- DATABASE_CLIENT=mongo
- DATABASE_HOST=db
- DATABASE_PORT=27017
- DATABASE_NAME=example
- HOST=localhost
expose:
- "1337"
depends_on:
- db
restart: always
labels:
- "traefik.frontend.rule=Host:api.localhost"
website:
build: ./app
labels:
- "traefik.frontend.rule=Host:web.localhost"
最后一个容器(website
)是使用create-react-app
的静态网站版本,占用了API(api
):
let response = await fetch(`http://api:1337/news`);
问题是该网站无法解析主机http://api:1337
(即按容器名称),但是如果我将该行更改为:
let response = await fetch(`http://<container-ip>:1337/news`);
一切正常。我试图建立一个网络,但它也不起作用。有什么帮助吗?谢谢!
答案 0 :(得分:0)
您只能从其他容器访问具有其名称的容器。 如果您将反应代码更改为:
let response = await fetch('http://localhost:8080/news', {
headers: 'Host': 'api.localhost'
})
您应该可以访问您的容器