首页 > 解决方案 > 启动 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。

问题出在哪里?任何意见或帮助表示赞赏!

标签: dockerdocker-composeamazon-dynamodb

解决方案


通过docker-compose.ymlamazon/dynamodb-local容器定义了一个名称(container_name: dynamodb-local,如果我们不设置此属性,docker-compose将使用服务的名称作为容器名称)。这使得同一网络中的其他容器能够通过其名称来寻址容器。

docker-run命令中,我们没有设置明确的容器名称。我们可以通过执行来设置一个明确的容器名称docker run ... --name dynamodb-local ...。更多细节可以在相应的docker run文档中找到。


推荐阅读