Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting System.Net.Sockets.SocketException (99): Cannot assign requested address when creating a container from another container #646

Open
krzysztof-kukla1974 opened this issue Jun 13, 2023 · 1 comment

Comments

@krzysztof-kukla1974
Copy link

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, IDictionary2 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, IDictionary2 headers, IRequestContent data, CancellationToken cancellationToken)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary2 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(IEnumerable1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary2 headers, TimeSpan timeout, CancellationToken token)
2023-06-13 18:01:31 at Docker.DotNet.DockerClient.MakeRequestAsync(IEnumerable1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary2 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<string> 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<string>
                {
                    localFolder + ":" + dockerFolder
                },
                NetworkMode = networkName // "trace"
            },
            Cmd = new List<string>
            {
                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)!!!

@Yerongn
Copy link

Yerongn commented Jul 5, 2023

you can try docker run -it -v /var/run/docker.sock:/var/run/docker.sock --name ..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants