这是我的情况。我们正在慢慢地将我们的虚拟机从Vagrant迁移到Docker,但我们仍然是Docker的新手。我们的一些较新的系统开发环境已经转移到Docker。我们有一个测试代码,它运行在较旧的Vagrant VM上,用于与运行Django Restful API应用程序的Vagrant进行通信,以便运行集成测试。这个Django API现在位于Docker容器中。所以现在我们需要在vagrant中运行的测试代码能够向在docker中运行的API发出请求。 docker容器和vagrant都在主机(MacOS)上并排运行。我们使用Docker compose来初始化docker容器,主要的compose yaml文件如下所示。
services:
django-api:
ports:
- "8080:8080"
build:
context: ..
dockerfile: docker/Dockerfile.bapi
extends:
file: docker-compose-base.yml
service: django-api
depends_on:
- db
volumes:
- ../:/workspace
command: ["tail", "-f", "/dev/null"]
env_file:
- ${HOME}/.pam_environment
environment:
- DATABASE_URL=postgres://postgres:password@db
- PGHOST=db
- PGPORT=5432
- PGUSER=postgres
- PGPASSWORD=password
- CLOUDAMQP_URL=amqp://rabbitmq
db:
ports:
- "5432"
extends:
file: docker-compose-base.yml
service: db
volumes:
- ./docker-entrypoint-initdb.d/init-postgress-db.sh:/docker-entrypoint-initdb.d/init-postgress-db.sh
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: django-api-dev
我希望在vagrant上运行的测试仍然能够与现在在docker上运行的django应用程序进行通信,类似于它在api中运行时与api通信的方式。流浪汉。我在docker compose文件中尝试了几种不同类型的网络配置,但是网络不是我的强项,我真的只是在黑暗中拍摄。
有没有办法配置我的泊坞容器和/或我的流浪汉,以便他们可以互相交谈?我需要暴露我的docker容器的IP地址,以便我的流浪者可以访问它。
非常感谢任何帮助/提示/指导!
答案 0 :(得分:1)
在您的Vagrantfile中,确保您拥有一个仅限私有主机的网络。我通常使用固定IP
config.vm.network "private_network", ip: "192.168.33.100"
现在两个虚拟机都将在仅主机网络中获得静态IP。在Django VM中运行docker-compose up -d
时。您的VM会将端口8080
映射到容器8080
。因此,您可以在其他VM中使用192.168.33.100:8080
来测试API
答案 1 :(得分:0)
我希望在流浪者身上运行的测试仍然存在 能够与正在运行的django应用程序进行通信 docker,类似于它与api通信的方式 在一个流浪汉中奔跑。
正如您所说,您正在使用docker-compose,因此公开端口可以达到您所需要的目的。在定义了django应用程序的yml文件中,创建一个端口映射,它将主机上的端口绑定到容器中的端口。你可以这样做:
ports:
"<host_port_where_you_want_to_access>:<container_port_where_application_is_running>"
有没有办法配置我的泊坞容器和/或我的流浪者 他们可以互相交谈吗?我需要暴露我的码头工人 容器的IP地址,以便我的流浪者可以访问它。
是的。如果两个容器位于同一网络中(当服务在同一个组合文件中声明时,默认情况下所有服务都在同一网络中),则一个容器可以通过调用其服务名称与其他容器通信。
示例:在相关指定的yml文件中,django-api
可以在db
访问http://db:xxxx/
,其中xxxx可以是容器内的任何端口。 xxxx
无需映射到主机或不需要公开。