【发布时间】:2020-02-09 05:24:31
【问题描述】:
我们正在使用 docker-compose 为我们的应用设置服务:
version: "3"
services:
db:
container_name: db
image: postgres:11.1
environment:
POSTGRES_USER: xxx
POSTGRES_PASSWORD: xxx
POSTGRES_DB: xxx
PGPASSWORD: xxx
volumes:
- pgdata:/var/lib/postgresql/data
- ./data/dbdump:/dbdump
networks:
- zenet
ports:
- "5432:5432"
# The React web application
web:
container_name: web
build:
context: .
dockerfile: devenv/web/Dockerfile
volumes:
- ./src/client-app:/usr/local/abc
- /usr/local/abc/node_modules
networks:
- zenet
ports:
- "3000:3000"
command: npm run startindocker
# The Django Rest Framework API
api:
container_name: api
build:
context: .
dockerfile: devenv/api/Dockerfile
environment:
DJANGO_SETTINGS_MODULE: abc.settings.dev
PYTHONSTARTUP: /root/pythonstartup.sh
PYTHONIOENCODING: UTF-8
volumes:
- .:/usr/local/borrow-a-boat
- ./devenv/api/pythonrc.py:/root/pythonstartup.sh
networks:
- zenet
depends_on:
- "db"
ports:
- "9000:9000"
command:
python3 /usr/local/borrow-a-boat/src/django/abc/manage.py runserver 0.0.0.0:9000
tty: true
volumes:
pgdata:
customboatdata:
networks:
zenet:
(敏感信息已被替换)
我的同事的设置运行良好。我设置了应用程序,卷和容器已启动并运行。我可以通过浏览器在端口 9000 处点击服务api 并确认数据库已填充。但是,我的web 服务无法从 api 获取数据。 我如何才能确认上述断言是正确的,并且网络确实无法与 api 服务通信。
我该如何解决这个问题并让网络从 api 接收数据。为新手问题道歉。
编辑:
当我使用docker exec -it [containerID] /bin/sh 在web 容器内运行ping api 时,我收到以下形式的响应:
64 bytes from 172.18.0.4: seq=139 ttl=64 time=0.084 ms
所以,很明显,我的断言是不正确的。为什么web 服务无法得到api 服务的响应。当我在浏览器中加载web 应用程序时,在被命中的 api 的终端中没有任何日志显示。
EDIT-2:
根据@runwuf 问题和我的回答,显然,“网络”能够与“api”服务进行通信。所以,还有其他问题。以下是我们在系统上设置堆栈的步骤。我使用 Linux Mint 19.2 操作系统,而团队使用 Mac。命令是:
- docker kill $(docker_container_names)
- docker rm -v $(docker_container_names)
- docker 卷 rm abc_pgdata
- docker image rm abc_api
- docker image rm abc_web
- docker-compose 构建
- docker-compose up -d db api web
- ssh abc@abc.com 'pg_dump abc |压缩包' |枪弹 | docker-compose run --rm db psql --host db --username abc
- docker-compose run --rm db psql --host db --username abc -c "update core_photo set image_base = 'sample.jpg'"
- docker-compose run --rm db psql --host db --username abc -c "update core_experienceimage set image_base = 'sample.jpg'"
【问题讨论】:
-
什么实体应该调用 API 服务? (服务到服务调用?浏览器应用程序?)您执行该调用的机械性如何?
-
抱歉跳过基本介绍。 'web' 服务是一个 React Web 应用程序,
api服务是一个 Django Rest Framework 容器服务,db是 postgres。假设 Web 应用程序在最初加载应用程序后获取一些数据以显示。 -
@Kayote 当您从网络容器
telnet api 9000或curl http://api:9000得到什么响应? -
@runwuf 我得到一个看似 json 的响应,其中关键字和 api 地址作为值。我认识这个api。谢谢
-
这不是 CORS 问题吗?
标签: docker docker-compose port