Hi,
I really need a help. I am not able to communicate between two docker containers in the same network. I have one Web App and one Web API, both developed in net core. When I open each container individually, it’s all fine, however when I open it using docker-compose, my problems start, the Web App cannot reach the Web API, another interesting point my Web API is not accessible from the browsers, I tested also via curl connected in the Web App container to see if I could reach the Web API, in all of them the connection is refused.
The curl commands are below, from the Web App Document_Manager I tried to reach the API via Docker DNS name or Network IP.
curl -l -v https://DemandUploader/api/v1/jobs
curl -l -v https://172.21.0.3/api/v1/jobs
[Updated] it worked with the following address host.docker.internal:44335. But I believe an error with SSL.
# curl -l -v https://host.docker.internal:44335/api/v1/jobs
* Expire in 4 ms for 1 (transfer 0x559aecfc4fb0)
* Trying 192.168.65.2...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x559aecfc4fb0)
* Connected to host.docker.internal (192.168.65.2) port 44335 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to host.docker.internal:44335
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to host.docker.internal:44335
I can access via the browser the Web App, but I can’t reach the Web API.
https://localhost:51113/ - Web App opens ok - but I don't know who exposed this port (probably Visual Studio)
https://localhost:44349/ - Web App opens ok, port correctly exposed
https://localhost:44335/api/v1/jobs - Web API doesn't work. This site can't be reach, no clue why.
My docker compose file is
version: '3.5'
services:
documentuploader:
image: ${DOCKER_REGISTRY-}documentuploader
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://localhost;http://localhost
- ASPNETCORE_HTTPS_PORT=44335
# Do not create development certificate in an environment that will be distributed.
#- DOTNET_GENERATE_ASPNET_CERTIFICATE=false
networks:
- doc_manager
ports:
- "51217:80"
- "44335:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
- ${APPDATA}/ASP.NET/Https/:/root/.aspnet/https/
build:
context: .
dockerfile: DocumentUploader/Dockerfile
documentmanager:
image: ${DOCKER_REGISTRY-}documentmanager
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://localhost;http://localhost
- ASPNETCORE_HTTPS_PORT=44349
# Do not create development certificate in an environment that will be distributed.
#- DOTNET_GENERATE_ASPNET_CERTIFICATE=false
networks:
- doc_manager
ports:
- "51218:80"
- "44349:443"
volumes:
- ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
- ${APPDATA}/ASP.NET/Https/:/root/.aspnet/https/
build:
context: .
dockerfile: Document Manager/Dockerfile
networks:
doc_manager:
name: doc_manager
driver: bridge
My Web App Docker file
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Document Manager/Document Manager.csproj", "Document Manager/"]
COPY ["StorageLibrary/StorageLibrary.csproj", "StorageLibrary/"]
COPY ["ConfigurationLibrary/ConfigurationLibrary.csproj", "ConfigurationLibrary/"]
RUN dotnet restore "Document Manager/Document Manager.csproj"
COPY . .
WORKDIR "/src/Document Manager"
RUN dotnet build "Document Manager.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Document Manager.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Document Manager.dll"]
My Web API docker file
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DocumentUploader/DocumentUploader.csproj", "DocumentUploader/"]
COPY ["StorageLibrary/StorageLibrary.csproj", "StorageLibrary/"]
COPY ["ConfigurationLibrary/ConfigurationLibrary.csproj", "ConfigurationLibrary/"]
RUN dotnet restore "DocumentUploader/DocumentUploader.csproj"
COPY . .
WORKDIR "/src/DocumentUploader"
RUN dotnet build "DocumentUploader.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DocumentUploader.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DocumentUploader.dll", "--add-host host.docker.internal:host-gateway"]
My docker ps result
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85e3c839800b 153fcddf6be2 "tail -f /dev/null" 4 minutes ago Up 4 minutes 0.0.0.0:51218->80/tcp, :::51218->80/tcp, 0.0.0.0:44349->443/tcp Document_Manager
7c13697396ff 35a417564d5a "tail -f /dev/null" 4 minutes ago Up 4 minutes 0.0.0.0:51217->80/tcp, :::51217->80/tcp, 0.0.0.0:44335->443/tcp, :::44335->443/tcp DocumentUploader
My docker network inspect doc_manager :
[
{
"Name": "doc_manager",
"Id": "10bf638deffa7ebf60c09e44930724a09c6e2b3e26a818e1e1ba6077466fc91e",
"Created": "2021-09-14T10:10:47.2165323Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"7c13697396ffcba2c41b99ccdb877bb3a328bb3db161b0beda65c5fe79c92af7": {
"Name": "DocumentUploader",
"EndpointID": "f5e4810c43e3082801cd3bba388060ec5cb868c6fc0e7801537736133c9f662d",
"MacAddress": "02:42:ac:15:00:03",
"IPv4Address": "172.21.0.3/16",
"IPv6Address": ""
},
"85e3c839800be1fa6b2ea654545fc54ef82341eb944ab3c958ed5976489f1462": {
"Name": "Document_Manager",
"EndpointID": "a2a46723f4b4a8f2a8e58764c518ef0fad2e122a64a39ff68101bf9d1288f968",
"MacAddress": "02:42:ac:15:00:02",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "doc_manager",
"com.docker.compose.project": "dockercompose2539187112001429162",
"com.docker.compose.version": "2.0.0"
}
}
]
Any suggestion? What can I do to trouble-shoot the connection refused? I am wondering if the Web API was really launched in the container.