public async Task <ActionResult <StandardResponse> > CopyContainer(Post post) { // Assume the username of post is the user who want to copy the container // NOT THE AURTHOR string ipAddress = gRpcClient.getServerIp(new ServerRequest() { ContainerId = post.ContainerId.ToString() }).Ip; if (ipAddress.Length == 0) { return(NotFound()); } Container container = await _context.Container.FindAsync(post.ContainerId); Container newContainer = new Container() { Username = post.Username, ContainerName = container.ContainerName, CreateTime = DateTime.Now, Type = container.Type }; await _context.AddAsync(newContainer); await _context.SaveChangesAsync(); CopyContainerDto dto = new CopyContainerDto() { ContainerId = newContainer.ContainerId, ImageId = post.PostId }; var dtoJSON = new StringContent( System.Text.Json.JsonSerializer.Serialize(dto, new JsonSerializerOptions()), Encoding.UTF8, "application/json"); using var httpResponse = await _factory.CreateClient() .PostAsync("http://" + ipAddress + ":13000/api/docker/Import", dtoJSON); if (httpResponse.IsSuccessStatusCode) { return(NewResponse(200, "复制成功", null)); } else { return(NewResponse(200, "复制失败", null)); } }
public async Task <ActionResult <StandardResponse> > Import(CopyContainerDto dto) { string startString = "mlab" + dto.ContainerId; var imageList = await client.Images.ListImagesAsync(new ImagesListParameters()); string imageId = ""; foreach (var image in imageList) { if (image.RepoTags[0].StartsWith(dto.ImageId.ToString())) { imageId = image.ID; break; } } if (imageId == "") { return(NotFound()); } string mHostPort = (20000 + dto.ContainerId).ToString(); var result = await client.Containers.CreateContainerAsync(new Docker.DotNet.Models.CreateContainerParameters() { Image = imageId, Name = "mlab" + dto.ContainerId.ToString(), ExposedPorts = new Dictionary <string, EmptyStruct>() { { "8888", new EmptyStruct() } }, HostConfig = new HostConfig { PortBindings = new Dictionary <string, IList <PortBinding> > { { "8888", new List <PortBinding> { new PortBinding { HostPort = mHostPort } } } } } }); await cSRedisClient2.SetAsync(dto.ContainerId.ToString(), "127.0.0.1"); await cSRedisClient.SetAsync(dto.ContainerId.ToString(), mHostPort); return(NewResponse(200, "success", null)); }