我是 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 服务?我怎样才能做到这一点?
更新
我已更新 …
一般来说,我对异步编程和python还是很陌生,但是我想在状态机内实现异步功能。要求如下:
为了实现目标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) 我正在尝试将使用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的源数据类型
Run Code Online (Sandbox Code Playgroud)|SQL Server Data Types|AWS DMS Data Types| |----------------------------------------| |NVARCHAR (max) |NCLOB, TEXT |
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html
根据我的任务配置,会发生以下两种情况:
LongDescription列的信息已正确迁移到DynamoDb,但是文本被截断了LongDescription列信息未正确迁移到DynamoDb如何NVARCHAR(MAX)在不丢失任何数据的情况下将列正确迁移到DynamoDb?谢谢!
进度报告
将Amazon S3用作目标的限制
- 不支持完全LOB模式。
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html
我无法使用compress T-SQL命令将LongDescription列存储为二进制,因为我的SQLServer版本是2014
我试图将迁移任务运行到受限LOB模式,并使用最大字节大小作为限制。我的最大字节大小为45155996,所以我将46000KB设置为限制。这将导致以下错误:
无法将条目放入带有数据记录的表“ TestMigration_4”中,该记录具有源PK列“ SourceTableID”和值“ 123456”
我当前的项目包括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)