Within a single host, UNIX IPC mechanisms, especially UNIX domain sockets or pipes, can also be used to communicate between containers:
$ docker run --name c1 –v /var/run/foo:/var/run/foo –d –I –t base /bin/bash $ docker run --name c2 –v /var/run/foo:/var/run/foo –d –I –t base /bin/bash
Apps on c1
and c2
can communicate over the following Unix socket address:
struct sockaddr_un address; address.sun_family = AF_UNIX; snprintf(address.sun_path, UNIX_PATH_MAX, "/var/run/foo/bar" );
C1: Server.c |
C2: Client.c |
---|---|
bind(socket_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)); listen(socket_fd, 5); while((connection_fd = accept(socket_fd, (struct sockaddr *) &address, &address_length)) > -1) nbytes = read(connection_fd, buffer, 256); |
connect(socket_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)); write(socket_fd, buffer, nbytes); |