小编Lui*_*ril的帖子

网络 docker 容器上的 HttpClient 请求

我是 docker 容器的新手,我遇到了以下问题。我正在开发一个向公开的 api 发出请求的网页。它们都发布在通过网络链接的不同容器上。这是我的 docker-compose.yml 文件:

version: '2'

services:
  api:
    image: my/api
    networks:
      - api
    ports:
      - "8080:5000"    
    container_name: api  

  web:
    build:
      context: ./DockerWeb      
    networks:
      - api      
    ports:
      - "80:5000"    
    container_name: web

networks:    
  api:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我附加到运行我的网页的容器,我可以使用 ping api 容器而不会出现任何问题 ping api

尝试对 api 容器进行任何 Web 服务调用时会出现问题。我正在尝试初始化一个 HttpClient 对象,但是必须将此类对象的 BaseAddress 属性设置为有效的 Uri。

_client = new HttpClient();
_client.BaseAddress = new Uri(config.ApiUrl); //config.ApiUrl = "api"
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

UriFormatException:无效的 URI:无法确定 URI 的格式。

有没有办法 a) 以不同的方式公开容器名称,或者 b) 在不需要使用 URI 的情况下调用 Web 服务?我怎样才能做到这一点?

更新

我已更新 …

c# docker docker-networking asp.net-core-webapi

7
推荐指数
1
解决办法
6400
查看次数

python asyncio在执行器中使用回调运行

一般来说,我对异步编程和python还是很陌生,但是我想在状态机内实现异步功能。要求如下:

  1. 异步任务必须在任何时间点都可以取消
  2. 异步任务不得阻塞执行主线程
  3. 异步任务必须在完成后调用回调。

为了实现目标1和2,我已经成功实现了我的异步例​​程,以在执行器中运行,如下所示:asyncio:是否可以取消由执行器运行的未来?。调试时,我看到我也完成了#2,因为原始线程继续成功执行。但是,我很难实现回调函数。请注意,此回调函数必须在原始线程上运行,因为它将更改分配给它的对象的状态。我该怎么做?

我的代码:

class Free(State):

    def write(self, manager):
        write_future = self.write_async(manager)
        self.set_write_future(write_future)         
        self.change_state(manager, busy_state)    

    def write_async(self, manager):
        event = threading.Event()
        write_future = asyncio.get_event_loop().run_in_executor(None, self.async_write, 10, event)
        write_future.add_done_callback(functools.partial(self.async_write_callback, manager))
        return event    

    def async_write(self, seconds_to_block, event):
        for i in range(seconds_to_block):
            if event.is_set():
                return
            print('writing {}/{}'.format(i, seconds_to_block))
            time.sleep(1)
        print('done writing {}'.format(seconds_to_block))

    def async_write_callback(self, manager):
        #never gets called
        self.terminate_future()
        self.change_state(manager, free_state)  
Run Code Online (Sandbox Code Playgroud)

python multithreading asynchronous

5
推荐指数
0
解决办法
1067
查看次数

AWS DMS(数据库迁移服务)完整的LOB不适用于SQL Server

我正在尝试将使用AWS DMS的SQL Server表迁移到DynamoDb目标。表结构如下:

|SourceTableID|Title      |Status|Display|LongDescription|
|-------------|-----------|------|-------|---------------|
|VARCHAR(100) |VARCHAR(50)|INT   |BIT    |NVARCHAR(MAX)  |
Run Code Online (Sandbox Code Playgroud)

每个字段都在无错误的迁移,并且在我的目标DynamoDb表中(该LongDescription列除外)。这是因为它是一NVARCHAR(MAX)列。

根据文档:

将DynamoDB用作目标时,存在以下限制:

  • 除非它是CLOB,否则AWS DMS不支持LOB数据。迁移数据时,AWS DMS会将CLOB数据转换为DynamoDB字符串。

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html

SQL Server的源数据类型

|SQL Server Data Types|AWS DMS Data Types|
|----------------------------------------|
|NVARCHAR (max)       |NCLOB, TEXT       |
Run Code Online (Sandbox Code Playgroud)

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html

根据我的任务配置,会发生以下两种情况:

  • 受限LOB模式:LongDescription列的信息已正确迁移到DynamoDb,但是文本被截断了
  • 完全LOB模式:LongDescription列信息未正确迁移到DynamoDb

如何NVARCHAR(MAX)在不丢失任何数据的情况下将列正确迁移到DynamoDb?谢谢!

进度报告

  1. 我已经尝试过迁移到S3目标。但是看起来S3不支持Full LOB

    将Amazon S3用作目标的限制

    • 不支持完全LOB模式。

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html

  1. 我无法使用compress T-SQL命令将LongDescription列存储为二进制,因为我的SQLServer版本是2014

  2. 我试图将迁移任务运行到受限LOB模式,并使用最大字节大小作为限制。我的最大字节大小为45155996,所以我将46000KB设置为限制。这将导致以下错误:

无法将条目放入带有数据记录的表“ TestMigration_4”中,该记录具有源PK列“ SourceTableID”和值“ 123456”

sql-server amazon-web-services amazon-dynamodb aws-dms

5
推荐指数
1
解决办法
131
查看次数

使用不同的目录上下文构建Docker映像

我当前的项目包括mongo服务器,rabbitmq服务器和dotnet核心服务。它的结构如下:

.
??? project1.docker-compose.yml #multiple docker-compose files for all projects
??? .dockerignore
??? Util/
|   ??? some common code across all projects
??? Project1/  #there are multiple projects at the same level with the same structure
    ??? .docker/
    |   ??? mongodb
    |   |   ???Dockerfile
    |   ??? rabbitmq
    |       ???Dockerfile
    ??? BusinessLogicClasses/
    |   ??? some classes that contain my business logic 
    ??? DotNetCoreService/
        ??? my service code 
        ??? .docker
            ???Dockerfile
Run Code Online (Sandbox Code Playgroud)

现在,我能够使用docker-compose命令成功为mongodb,rabbitmq和dot net core构建映像。docker-compose.yml位于主目录级别,因为我的不同项目(在本例中为Project1)引用了在Util目录下找到的代码。因此,我需要能够提供两个目录上方的上下文,以便可以在Dockerfile上使用COPY操作。

我的基本project1.docker-compose.yml如下(我排除了不重要的部分)

version: '3'
services:
  rabbitmq:
    build: 
      context: Project1/.docker/rabbitmq/ …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

2
推荐指数
1
解决办法
1328
查看次数