# Problem when request internal API with other container

**URL:** <https://community.traefik.io/t/problem-when-request-internal-api-with-other-container/12663>\
**Category:** Traefik v2\
**Tags:** rest-api, docker\
**Created:** [December 9, 2021, 4:27pm UTC](https://community.traefik.io/t/problem-when-request-internal-api-with-other-container/12663 "2021-12-09T16:27:35Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Konoo](https://sea2.discourse-cdn.com/flex020/user_avatar/community.traefik.io/konoo/32/4602_2.png) [@Konoo](https://community.traefik.io/u/Konoo)\
**Post date:** [December 9, 2021, 4:27pm UTC](https://community.traefik.io/t/problem-when-request-internal-api-with-other-container/12663/1 "2021-12-09T16:27:35Z")

</div>

Hello, I am working on a project where I need to host several websites on the same server, for this I turned to traefik, I managed to configure everything correctly, I can access my sites on my different subdomains. However I have an error when I want to communicate between these different sites, I have 3 services that run on my traefik, an API, a main website and an admin website. The admin website and the main website need to make requests on the API but it's unfortunately impossible, both sites return a 500 error with a timeout as below:

```auto
admin_1 | Error: connect ETIMEDOUT 141.94.247.71:443
admin_1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) {
admin_1 | errno: -110,
admin_1 | code: 'ETIMEDOUT',
admin_1 | syscall: 'connect',
admin_1 | address: '141.94.247.71',
admin_1 | port: 443,
admin_1 | config: {
admin_1 | transitional: {
admin_1 | silentJSONParsing: true,
admin_1 | forcedJSONParsing: true,
admin_1 | clarifyTimeoutError: false
admin_1 | },
admin_1 | adapter: [Function: httpAdapter],
admin_1 | transformRequest: [[Function: transformRequest] ],
admin_1 | transformResponse: [[Function: transformResponse] ],
admin_1 | timeout: 0,
admin_1 | xsrfCookieName: 'XSRF-TOKEN',
admin_1 | xsrfHeaderName: 'X-XSRF-TOKEN',
admin_1 | maxContentLength: -1,
admin_1 | maxBodyLength: -1,
admin_1 | validateStatus: [Function: validateStatus],
admin_1 | headers: {
admin_1 | Accept: 'application/json, text/plain, */*',
admin_1 | 'User-Agent': 'axios/0.24.0'
admin_1 | },
admin_1 | baseURL: 'https://api.victorbillaud.fr',
admin_1 | method: 'get',
admin_1 | url: '/articles',
admin_1 | data: undefined
admin_1 | },
admin_1 | request: <ref *1> Writable {
admin_1 | _writableState: WritableState {
admin_1 | objectMode: false,
admin_1 | highWaterMark: 16384,
admin_1 | finalCalled: false,
admin_1 | needDrain: false,
admin_1 | ending: false,
admin_1 | ended: false,
admin_1 | finished: false,
admin_1 | destroyed: false,
admin_1 | decodeStrings: true,
admin_1 | defaultEncoding: 'utf8',
admin_1 | length: 0,
admin_1 | writing: false,
admin_1 | corked: 0,
admin_1 | sync: true,
admin_1 | bufferProcessing: false,
admin_1 | onwrite: [Function: bound onwrite],
admin_1 | writecb: null,
admin_1 | writelen: 0,
admin_1 | afterWriteTickInfo: null,
admin_1 | buffered: [],
admin_1 | bufferedIndex: 0,
admin_1 | allBuffers: true,
admin_1 | allNoop: true,
admin_1 | pendingcb: 0,
admin_1 | constructed: true,
admin_1 | prefinished: false,
admin_1 | errorEmitted: false,
admin_1 | emitClose: true,
admin_1 | autoDestroy: true,
admin_1 | errored: null,
admin_1 | closed: false,
admin_1 | closeEmitted: false,
admin_1 | [Symbol(kOnFinished)]: []
admin_1 | },
admin_1 | _events: [Object: null prototype] {
admin_1 | response: [Function: handleResponse],
admin_1 | error: [Function: handleRequestError]
admin_1 | },
admin_1 | _eventsCount: 2,
admin_1 | _maxListeners: undefined,
admin_1 | _options: {
admin_1 | maxRedirects: 21,
admin_1 | maxBodyLength: 10485760,
admin_1 | protocol: 'https:',
admin_1 | path: '/articles',
admin_1 | method: 'GET',
admin_1 | headers: [Object],
admin_1 | agent: undefined,
admin_1 | agents: [Object],
admin_1 | auth: undefined,
admin_1 | hostname: 'api.victorbillaud.fr',
admin_1 | port: null,
admin_1 | nativeProtocols: [Object],
admin_1 | pathname: '/articles'
admin_1 | },
admin_1 | _ended: true,
admin_1 | _ending: true,
admin_1 | _redirectCount: 0,
admin_1 | _redirects: [],
admin_1 | _requestBodyLength: 0,
admin_1 | _requestBodyBuffers: [],
admin_1 | _onNativeResponse: [Function (anonymous)],
admin_1 | _currentRequest: ClientRequest {
admin_1 | _events: [Object: null prototype],
admin_1 | _eventsCount: 7,
admin_1 | _maxListeners: undefined,
admin_1 | outputData: [],
admin_1 | outputSize: 0,
admin_1 | writable: true,
admin_1 | destroyed: false,
admin_1 | _last: true,
admin_1 | chunkedEncoding: false,
admin_1 | shouldKeepAlive: false,
admin_1 | maxRequestsOnConnectionReached: false,
admin_1 | _defaultKeepAlive: true,
admin_1 | useChunkedEncodingByDefault: false,
admin_1 | sendDate: false,
admin_1 | _removedConnection: false,
admin_1 | _removedContLen: false,
admin_1 | _removedTE: false,
admin_1 | _contentLength: 0,
admin_1 | _hasBody: true,
admin_1 | _trailer: '',
admin_1 | finished: true,
admin_1 | _headerSent: true,
admin_1 | _closed: false,
admin_1 | socket: [TLSSocket],
admin_1 | _header: 'GET /articles HTTP/1.1\r\n' +
admin_1 | 'Accept: application/json, text/plain, */*\r\n' +
admin_1 | 'User-Agent: axios/0.24.0\r\n' +
admin_1 | 'Host: api.victorbillaud.fr\r\n' +
admin_1 | 'Connection: close\r\n' +
admin_1 | '\r\n',
admin_1 | _keepAliveTimeout: 0,
admin_1 | _onPendingData: [Function: nop],
admin_1 | agent: [Agent],
admin_1 | socketPath: undefined,
admin_1 | method: 'GET',
admin_1 | maxHeaderSize: undefined,
admin_1 | insecureHTTPParser: undefined,
admin_1 | path: '/articles',
admin_1 | _ended: false,
admin_1 | res: null,
admin_1 | aborted: false,
admin_1 | timeoutCb: null,
admin_1 | upgradeOrConnect: false,
admin_1 | parser: null,
admin_1 | maxHeadersCount: null,
admin_1 | reusedSocket: false,
admin_1 | host: 'api.victorbillaud.fr',
admin_1 | protocol: 'https:',
admin_1 | _redirectable: [Circular *1],
admin_1 | [Symbol(kCapture)]: false,
admin_1 | [Symbol(kNeedDrain)]: false,
admin_1 | [Symbol(corked)]: 0,
admin_1 | [Symbol(kOutHeaders)]: [Object: null prototype]
admin_1 | },
admin_1 | _currentUrl: 'https://api.victorbillaud.fr/articles',
admin_1 | [Symbol(kCapture)]: false
admin_1 | },
admin_1 | response: undefined,
admin_1 | isAxiosError: true,
admin_1 | toJSON: [Function: toJSON]
admin_1 | } 

```

I also try to make a request from the admin container to the api container as below, but I get the same error...

```auto
* Expire in 0 ms for 6 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 0 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 0 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 0 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 0 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 1 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 4 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 4 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 4 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 2 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 3 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 4 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 3 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 3 ms for 1 (transfer 0x564403ffbfb0)
* Expire in 3 ms for 1 (transfer 0x564403ffbfb0)
* Trying 141.94.247.71...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x564403ffbfb0)
* connect to 141.94.247.71 port 443 failed: Connection timed out
* Failed to connect to api.victorbillaud.fr port 443: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to api.victorbillaud.fr port 443: Connection timed out

```

Thank you for your help, I post here my traefik configuration files

docker-compose.yml

```auto
version: '3.2'

services:
  traefik:
    image: traefik:2.5
    restart: unless-stopped
    networks:
      - proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./config/traefik.yml:/traefik.yml
      - ./letsencrypt/acme.json:/acme.json
      - /var/run/docker.sock:/var/run/docker.sock

  nginx:
    image: nginx:latest
    networks:
      - proxy
    labels:
      # Traefik configuration, Hostname needs to be changed
      - traefik.http.routers.nginx-http.rule=Host(`victorbillaud.fr`)
      - traefik.http.routers.nginx-http.entrypoints=http
      - traefik.http.routers.nginx-http.middlewares=redirect
      - traefik.http.routers.nginx-https.rule=Host(`victorbillaud.fr`)
      - traefik.http.routers.nginx-https.entrypoints=https
      - traefik.http.routers.nginx-https.tls=true
      - traefik.http.routers.nginx-https.tls.certresolver=letsencrypt
      - traefik.http.services.nginx.loadbalancer.server.port=80
      - traefik.http.middlewares.redirect.redirectscheme.scheme=https

  admin:
    image: admin
    networks:
      - proxy
    ports:
      - 3001:3001
    labels:
      # Traefik configuration, Hostname needs to be changed
      - traefik.http.routers.admin-http.rule=Host(`admin.victorbillaud.fr`)
      - traefik.http.routers.admin-http.entrypoints=http
      - traefik.http.routers.admin-http.middlewares=redirect
      - traefik.http.routers.admin-https.rule=Host(`admin.victorbillaud.fr`)
      - traefik.http.routers.admin-https.entrypoints=https
      - traefik.http.routers.admin-https.tls=true
      - traefik.http.routers.admin-https.tls.certresolver=letsencrypt
      - traefik.http.services.admin.loadbalancer.server.port=3001
      - traefik.http.middlewares.redirect.redirectscheme.scheme=https

  api-express:
    image: api-express
    networks:
      - proxy
    labels:
      # Traefik configuration, Hostname needs to be changed
      - traefik.http.routers.api-http.rule=Host(`api.victorbillaud.fr`)
      - traefik.http.routers.api-http.entrypoints=http
      - traefik.http.routers.api-http.middlewares=redirect
      - traefik.http.routers.api-https.rule=Host(`api.victorbillaud.fr`)
      - traefik.http.routers.api-https.entrypoints=https
      - traefik.http.routers.api-https.tls=true
      - traefik.http.routers.api-https.tls.certresolver=letsencrypt
      - traefik.http.services.api.loadbalancer.server.port=3002
      - traefik.http.middlewares.redirect.redirectscheme.scheme=https

# ffmepdl:
# image: ffmepdl
# networks:
# - proxy
# labels:
# # Traefik configuration, Hostname needs to be changed
# - traefik.http.routers.ffmepdl-http.rule=Host(`ffmepdl.victorbillaud.fr`)
# - traefik.http.routers.ffmepdl-http.entrypoints=http
# - traefik.http.routers.ffmepdl-http.middlewares=redirect
# - traefik.http.routers.ffmepdl-https.rule=Host(`ffmepdl.victorbillaud.fr`)
# - traefik.http.routers.ffmepdl-https.entrypoints=https
# - traefik.http.routers.ffmepdl-https.tls=true
# - traefik.http.routers.ffmepdl-https.tls.certresolver=letsencrypt
# - traefik.http.services.ffmepdl.loadbalancer.server.port=3000
# - traefik.http.middlewares.redirect.redirectscheme.scheme=https 

```

traefik.yml :

```auto
api:
  dashboard: true
  insecure: false

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  docker:
    network: proxy

certificatesResolvers:
  letsencrypt:
    acme:
      email: victorbillaud@gmail.com
      storage: acme.json
      httpChallenge:
        entryPoint: http

```

Thank you
