Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django docker运行时,会发生错误&引用;ValueError:无法配置处理程序';望塔';:您必须指定一个地区。”;_Django_Amazon Web Services_Docker_Amazon Cloudwatchlogs - Fatal编程技术网

Django docker运行时,会发生错误&引用;ValueError:无法配置处理程序';望塔';:您必须指定一个地区。”;

Django docker运行时,会发生错误&引用;ValueError:无法配置处理程序';望塔';:您必须指定一个地区。”;,django,amazon-web-services,docker,amazon-cloudwatchlogs,Django,Amazon Web Services,Docker,Amazon Cloudwatchlogs,首先,我使用服务器环境 服务器:django+nginx+uwsgi 云:docker+AWS云服务器 日志记录:AWS CloudWatch日志服务+了望台第三方应用程序 如果我使用python manage.py runserver在本地运行服务器,那么该日志将很好地存储在CloudWatch日志中。但是,如果使用docker和docker run--rm-it-p8080:80image\u name命令构建项目,则会发生以下错误 Traceback (most recent call

首先,我使用服务器环境

  • 服务器:django+nginx+uwsgi
  • 云:docker+AWS云服务器
  • 日志记录:AWS CloudWatch日志服务+了望台第三方应用程序
如果我使用
python manage.py runserver
在本地运行服务器,那么该日志将很好地存储在CloudWatch日志中。但是,如果使用docker和
docker run--rm-it-p8080:80image\u name
命令构建项目,则会发生以下错误

Traceback (most recent call last):
  File "/usr/lib/python3.5/logging/config.py", line 558, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/lib/python3.5/logging/config.py", line 731, in configure_handler
    result = factory(**kwargs)
  File "/usr/local/lib/python3.5/dist-packages/watchtower/__init__.py", line 78, in __init__
    self.cwl_client = (boto3_session or boto3).client("logs")
  File "/usr/local/lib/python3.5/dist-packages/boto3/__init__.py", line 83, in client
    return _get_default_session().client(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/boto3/session.py", line 263, in client
    aws_session_token=aws_session_token, config=config)
  File "/usr/local/lib/python3.5/dist-packages/botocore/session.py", line 836, in create_client
    client_config=config, api_version=api_version)
  File "/usr/local/lib/python3.5/dist-packages/botocore/client.py", line 70, in create_client
    verify, credentials, scoped_config, client_config, endpoint_bridge)
  File "/usr/local/lib/python3.5/dist-packages/botocore/client.py", line 224, in _get_client_args
    verify, credentials, scoped_config, client_config, endpoint_bridge)
  File "/usr/local/lib/python3.5/dist-packages/botocore/args.py", line 45, in get_client_args
    endpoint_url, is_secure, scoped_config)
  File "/usr/local/lib/python3.5/dist-packages/botocore/args.py", line 103, in compute_client_args
    service_name, region_name, endpoint_url, is_secure)
  File "/usr/local/lib/python3.5/dist-packages/botocore/client.py", line 297, in resolve
    service_name, region_name)
  File "/usr/local/lib/python3.5/dist-packages/botocore/regions.py", line 122, in construct_endpoint
    partition, service_name, region_name)
  File "/usr/local/lib/python3.5/dist-packages/botocore/regions.py", line 135, in _endpoint_for_partition
    raise NoRegionError()
botocore.exceptions.NoRegionError: You must specify a region.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "django_app/manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 341, in execute
    django.setup()
  File "/usr/local/lib/python3.5/dist-packages/django/__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/local/lib/python3.5/dist-packages/django/utils/log.py", line 75, in configure_logging
    logging_config_func(logging_settings)
  File "/usr/lib/python3.5/logging/config.py", line 795, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/lib/python3.5/logging/config.py", line 566, in configure
    '%r: %s' % (name, e))
ValueError: Unable to configure handler 'watchtower': You must specify a region.

问题出在哪里?

您的容器中没有配置AWS区域,凭证可能也没有配置。看看手术室

CLI为上一节中配置的配置文件生成的文件如下所示:

~/.aws/凭证 [默认值] aws\u access\u key\u id=Akiaiosfodnn7示例 aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

~/.aws/config [默认值] 地区=美国西部2 输出=json

支持以下设置。 aws访问密钥id–aws访问密钥

aws_secret_access_key–aws密钥

aws_会话_令牌–aws会话令牌。只有在使用临时安全凭据时,才需要会话令牌

地区–AWS地区

输出–输出格式(json、文本或表格)


您需要在容器中提供aws凭据。您可以使用卷以数字方式安装它们:

docker run -v $HOME/.aws:/root/.aws --rm -it -p 8080: 80 image_name

您的凭据应该在本地
$HOME/.aws
中,然后将它们装载到运行您的应用程序的用户的主目录中(如果用户是其他用户,请将/root更改为另一个目录)

但是,如果我将django logging更改为默认值,docker run没有问题,并且推送到aws ECS也会成功,因此,服务器与nginx配合良好。即使我在使用watchtower处理程序时出错,这是否也是一个凭据问题?本地.aws文件夹当然设置了凭据。谢谢。正如你所说,凭证问题是正确的。多亏了当地的测试才成功@谢谢你。你可以用你的命令在本地创建一个docker容器。嗨@Robert实际上,我只想再问你一个问题。我将一个容器上传到AWS ECS,目前无法执行“docker运行”。因此,我将“COPY.aws/.aws”命令添加到Dockerfile中,我已验证此方法是否传递凭据。“docker exec”查看容器内部。.aws目录通常复制到根路径。但它不会传递诸如“docker run-v$HOME/.aws:/root/.aws--rm-it-p8080:80image\u name”之类的凭据。还有别的办法吗?啊。。。我的第一句话是错误的(你可以创建=>我可以创建我在下面的url中写了上面的问题。谢谢你,好的,我会在那里看看!
docker run -v $HOME/.aws:/root/.aws --rm -it -p 8080: 80 image_name