docker - 启动 docker 容器
问题描述
我有一个docker-compose.yml文件,它启动两个服务:amazon/dynamodb-local on 8000 port 和django-service。django-service 运行依赖于 dynamodb-local 的测试。
这是工作 docker-compose.yml:
version: '3.8'
services:
dynamodb-local:
image: "amazon/dynamodb-local:latest"
container_name: dynamodb-local
ports:
- "8000:8000"
django-service:
depends_on:
- dynamodb-local
image: django-service
build:
dockerfile: Dockerfile
context: .
env_file:
- envs/tests.env
volumes:
- ./:/app
command: sh -c 'cd /app && pytest tests/integration/ -vv'
现在我需要在没有 docker-compose 的情况下运行它,只使用 docker 本身。
我尝试执行以下操作:
docker network create -d bridge net // create a network for dynamodb-local and django-service
docker run --network=net --rm -p 8000:8000 -d amazon/dynamodb-local:latest // run cont. att. to network
docker run --network=net --rm --env-file ./envs/tests.env -v `pwd`:/app django-service /bin/sh -c 'env && cd /app && pytest tests/integration -vv'
我可以看到两个服务都启动了,但我无法连接到 dynamo-db。
问题出在哪里?任何意见或帮助表示赞赏!
解决方案
通过docker-compose.yml
,amazon/dynamodb-local
容器定义了一个名称(container_name: dynamodb-local
,如果我们不设置此属性,docker-compose
将使用服务的名称作为容器名称)。这使得同一网络中的其他容器能够通过其名称来寻址容器。
在docker-run
命令中,我们没有设置明确的容器名称。我们可以通过执行来设置一个明确的容器名称docker run ... --name dynamodb-local ...
。更多细节可以在相应的docker run
文档中找到。
推荐阅读
- python - 如何将数据框的列标题复制到每一行值?
- python - celery:打印以 apply_async 开始的组中每个任务的状态
- php - $_GET 不返回值的 Wordpress 插件问题
- scala - Spark 数据集类型注释支持
- python - 使用 pandas 将字符串替换为自身的较短版本
- oop - python 的 __repr__ 和 __str__ 的球拍等价物?
- python - UDP广播后监听哪个端口?
- java - 创建选项的通用函数
- c# - 要将一个 GridView / SqlDataSource 用于相同的查询但不同的 ConnectionStrings?还是每个 ConnectionString 有多个?
- jquery - Fullcalendar 版本 4 selectMirror 不工作