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