Getting System.Net.Sockets.SocketException (99): Cannot assign requested address when creating a container from another container
- Dominant language
- C#
- Stars
- 2.4k
- Forks
- 416
- PR merge metrics
- No merged PRs in 30d
Description
**Output of `dotnet --info`:**
```
.NET SDK:
Version: 7.0.302
Commit: 990cf98a27
Runtime Environment:
OS Name: Mac OS X
OS Version: 12.6
OS Platform: Darwin
RID: osx.12-arm64
Base Path: /usr/local/share/dotnet/sdk/7.0.302/
Host:
Version: 7.0.5
Architecture: arm64
Commit: 8042d61b17
.NET SDKs installed:
6.0.403 [/usr/local/share/dotnet/sdk]
6.0.404 [/usr/local/share/dotnet/sdk]
6.0.405 [/usr/local/share/dotnet/sdk]
6.0.407 [/usr/local/share/dotnet/sdk]
6.0.408 [/usr/local/share/dotnet/sdk]
7.0.100 [/usr/local/share/dotnet/sdk]
7.0.101 [/usr/local/share/dotnet/sdk]
7.0.102 [/usr/local/share/dotnet/sdk]
7.0.202 [/usr/local/share/dotnet/sdk]
7.0.203 [/usr/local/share/dotnet/sdk]
7.0.302 [/usr/local/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 6.0.11 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.12 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.13 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.15 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.16 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.2 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.4 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.5 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.11 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.12 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.13 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.15 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.16 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.2 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.4 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
x64 [/usr/local/share/dotnet/x64]
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
```
**What version of Docker.DotNet?:**
```
3.125.15
```
**Steps to reproduce the issue:**
I'm trying to dynamically create a container from another container and I'm getting SocketException which suggesting sth is incorrect with docker network configuration.
1. Crate a docket image that do sth (in my case it's getting some O365 data via Graph API). The image is called "trace".
2. Create another docket image (called "trace-runner") that dynamically (via api) creates a container from "trace" image.
3. Run a container from "trace-runner" image.
4. Make sure both containers run on the same network bridge so that they can talk each other via IP or name (use --network option).
**What actually happened?:**
SocketException is thrown:
System.Net.Sockets.SocketException (99): Cannot assign requested address
2023-06-13 18:01:31 at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.CreateException(SocketError error, Boolean forAsyncThrow)
2023-06-13 18:01:31 at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ConnectAsync(Socket socket)
2023-06-13 18:01:31 at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Net.Sockets.Socket.ConnectAsync(EndPoint remoteEP)
2023-06-13 18:01:31 at System.Net.Sockets.SocketTaskExtensions.ConnectAsync(Socket socket, EndPoint remoteEP)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<<-ctor>b__1>d.MoveNext()
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<.ctor>b__1(String host, Int32 port, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Microsoft.Net.Http.Client.ManagedHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
2023-06-13 18:01:31 at System.Net.Http.HttpClient.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, String path, IQueryString queryString, IDictionary`2 headers, IRequestContent data, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.PrivateMakeRequestAsync(TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, String path, IQueryString queryString, IDictionary`2 headers, IRequestContent data, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, CancellationToken token)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, CancellationToken token)
2023-06-13 18:01:31 at Docker.DotNet.ContainerOperations.CreateContainerAsync(CreateContainerParameters parameters, CancellationToken cancellationToken)
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Docker.DotNet.ContainerOperations.CreateContainerAsync(CreateContainerParameters parameters, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Program.CreateContainer(DockerClient client, String job, String imageName, String applicationID, String tenantID, String clientSecret, String userPrincipalNames, String folderName, String terms, String dockerFolder, String localFolder) in /App/Program.cs:line 50
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Program.CreateContainer(DockerClient client, String job, String imageName, String applicationID, String tenantID, String clientSecret, String userPrincipalNames, String folderName, String terms, String dockerFolder, String localFolder)
2023-06-13 18:01:31 at Program.Main(String[] args) in /App/Program.cs:line 33
2023-06-13 18:01:31 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
2023-06-13 18:01:31 at Program.Main(String[] args)
2023-06-13 18:01:31 at Program.(String[] args)
2023-06-13 18:01:31 --- End of stack trace from previous location ---
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<<-ctor>b__1>d.MoveNext()
2023-06-13 18:01:31 --- End of stack trace from previous location ---
2023-06-13 18:01:31 at Microsoft.Net.Http.Client.ManagedHandler.ProcessRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
**What did you expect to happen?:**
"trace" container is created.
**Additional information:**
The code from "trace-runner" image that creates a container from "trace" image:
```
internal static async Task CreateContainer (DockerClient client, string job, string imageName, string applicationID, string tenantID, string clientSecret, string userPrincipalNames, string folderName, string terms, string dockerFolder, string localFolder)
{
string networkName = "trace";
var response = await client.Containers.CreateContainerAsync(new CreateContainerParameters()
{
Image = imageName, // "trace-image",
Name = applicationID + "_" + job,
HostConfig = new HostConfig
{
AutoRemove = true,
Binds = new List
{
localFolder + ":" + dockerFolder
},
NetworkMode = networkName // "trace"
},
Cmd = new List
{
applicationID, // Graph API params: credentials - app ID
tenantID, // Graph API params: credentials - tenant ID
clientSecret, // Graph API params: credentials - secret
userPrincipalNames, // Graph API params: mailboxes to get data from
folderName, // Graph API params: mailbox folder
job, // Graph API params: date
terms, // Graph API params: others
dockerFolder + "/" + imageName// "/var/lib/docker/volumes/_data/trace-image" // output folder
}
});
return response.ID;
}
```
docker file to create "trace-runner" image container:
```
IMAGE_NAME="trace-runner-image"
PLATFORM="linux/arm64"
dotnet publish -c Release
docker ps -a
docker stop r1
docker rm r1
docker images
docker rmi $IMAGE_NAME
docker build --platform=$PLATFORM -t $IMAGE_NAME -f Dockerfile .
docker save $IMAGE_NAME -o ~/Downloads/$IMAGE_NAME.img
docker network ls
docker network rm trace
docker network create trace
docker run --name=r1 -d --network trace $IMAGE_NAME
```
Important note - everything works fine when "trace-runner" is run as an application (not as a container)!!!
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.