Skip to content

Instantly share code, notes, and snippets.

@x-yuri
Created June 27, 2024 09:22
Show Gist options
  • Save x-yuri/a5b314a1be5ade8a4e48d2cb428e610c to your computer and use it in GitHub Desktop.
Save x-yuri/a5b314a1be5ade8a4e48d2cb428e610c to your computer and use it in GitHub Desktop.
docker compose: depends_on

docker compose: depends_on

docker-compose.yml:

services:
  proxy:
    image: alpine:3.20
    command: sh -euc 'cd app; exec ./a.out'
    # command: sh -euc 'cd app; sleep 3; exec ./a.out'
    init: true
    volumes:
      - .:/app
    # depends_on:
    #   - app

  app:
    image: alpine:3.20
    command: sleep infinity
    init: true
    deploy:
      replicas: 10

a.c:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <arpa/inet.h>

int main()
{
    struct addrinfo hints, *res, *p;
    int status;
    char ipstr[INET6_ADDRSTRLEN];
    memset(&hints, 0, sizeof hints);
    hints.ai_socktype = SOCK_STREAM;
    if ((status = getaddrinfo("app", NULL, &hints, &res)) != 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
        return 2;
    }
    for (p = res; p; p = p->ai_next) {
        void *addr;
        if (p->ai_family == AF_INET) {
            struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
            addr = &(ipv4->sin_addr);
        } else {
            struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
            addr = &(ipv6->sin6_addr);
        }
        inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
        printf("%s\n", ipstr);
    }
    freeaddrinfo(res); // free the linked list
    return EXIT_SUCCESS;
}
$ docker compose run --rm proxy sh -euc 'apk add build-base; cd app; gcc a.c'
 Container docker-compose-depends-on-proxy-1  Created
 Container docker-compose-depends-on-app-1  Created
 Container docker-compose-depends-on-app-2  Created
 Container docker-compose-depends-on-app-3  Created
 Container docker-compose-depends-on-app-4  Created
 Container docker-compose-depends-on-app-5  Created
 Container docker-compose-depends-on-app-6  Created
 Container docker-compose-depends-on-app-7  Created
 Container docker-compose-depends-on-app-8  Created
 Container docker-compose-depends-on-app-9  Created
 Container docker-compose-depends-on-app-10  Created
Attaching to app-1, app-10, app-2, app-3, app-4, app-5, app-6, app-7, app-8, app-9, proxy-1
proxy-1  | 172.27.0.3
proxy-1 exited with code 0

sleep:

 Container docker-compose-depends-on-proxy-1  Recreate
 Container docker-compose-depends-on-app-1  Created
 Container docker-compose-depends-on-app-2  Created
 Container docker-compose-depends-on-app-3  Created
 Container docker-compose-depends-on-app-4  Created
 Container docker-compose-depends-on-app-5  Created
 Container docker-compose-depends-on-app-6  Created
 Container docker-compose-depends-on-app-7  Created
 Container docker-compose-depends-on-app-8  Created
 Container docker-compose-depends-on-app-9  Created
 Container docker-compose-depends-on-app-10  Created
 Container docker-compose-depends-on-proxy-1  Recreated
Attaching to app-1, app-10, app-2, app-3, app-4, app-5, app-6, app-7, app-8, app-9, proxy-1
proxy-1  | 172.27.0.7
proxy-1  | 172.27.0.8
proxy-1  | 172.27.0.11
proxy-1  | 172.27.0.10
proxy-1  | 172.27.0.5
proxy-1  | 172.27.0.12
proxy-1  | 172.27.0.6
proxy-1  | 172.27.0.4
proxy-1  | 172.27.0.2
proxy-1  | 172.27.0.9
proxy-1 exited with code 0

depends_on:

:r!docker compose up
 Container docker-compose-depends-on-app-1  Created
 Container docker-compose-depends-on-app-2  Created
 Container docker-compose-depends-on-app-3  Created
 Container docker-compose-depends-on-app-4  Created
 Container docker-compose-depends-on-app-5  Created
 Container docker-compose-depends-on-app-6  Created
 Container docker-compose-depends-on-app-7  Created
 Container docker-compose-depends-on-app-8  Created
 Container docker-compose-depends-on-app-9  Created
 Container docker-compose-depends-on-app-10  Created
 Container docker-compose-depends-on-proxy-1  Recreate
 Container docker-compose-depends-on-proxy-1  Recreated
Attaching to app-1, app-10, app-2, app-3, app-4, app-5, app-6, app-7, app-8, app-9, proxy-1
proxy-1  | 172.27.0.7
proxy-1  | 172.27.0.10
proxy-1  | 172.27.0.6
proxy-1  | 172.27.0.8
proxy-1  | 172.27.0.9
proxy-1  | 172.27.0.2
proxy-1  | 172.27.0.4
proxy-1  | 172.27.0.3
proxy-1  | 172.27.0.5
proxy-1  | 172.27.0.11
proxy-1 exited with code 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment