Wie kann ich meine lokale Kunden-Server-Anwendung mithilfe von Docker in einem lokalen Socket kommunizieren?Linux

Linux verstehen
Anonymous
 Wie kann ich meine lokale Kunden-Server-Anwendung mithilfe von Docker in einem lokalen Socket kommunizieren?

Post by Anonymous »

Ich habe meinen clientseitigen Code wie diesen, in dem der konstante Socket_Path "/tmp/my_socket" ist:
#define SOCKET_PATH "/tmp/my_socket"
//rest of the code

int main(int argc, char *argv[])
{
struct sockaddr_un server_addr;

server_addr.sun_family = AF_LOCAL; /*socket locali*/
strcpy(server_addr.sun_path, SOCKET_PATH);

if ((socket_fd = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0)
{
perror("Errore creazione welcoming socket");
return 1;
}

if ((connect(socket_fd,
(struct sockaddr *)&server_addr, sizeof(server_addr)) < 0))
{
perror("Errore connect");
return 1;
}

clientActions();

/*Pulizia prima della terminazione*/
close(socket_fd);
return 0;
}
< /code>
Meine Serverseite ist wie folgt: < /p>
#define SOCKET_PATH "/tmp/my_socket"
//rest of the code

int main(int argc, char* argv[]) {
int socket_fd, conn_fd;
struct sockaddr_un server_addr, client_addr;

server_addr.sun_family=AF_LOCAL; /*socket locali*/
unlink(SOCKET_PATH); /*Rimuove la socket se già esiste*/

strcpy(server_addr.sun_path, SOCKET_PATH);

printf("Server in esecuzione...\n");
sleep(1);

if ((socket_fd=socket(PF_LOCAL,SOCK_STREAM,0)) < 0){
perror("Errore creazione welcoming socket");
return 1;
}

if ((bind(socket_fd,
(struct sockaddr*)&server_addr,sizeof(server_addr))
Die Ausführung des Codes ohne Docker mit dem GCC -Compiler auf meinem Ubuntu Virtual Machine funktioniert einwandfrei. Aber wenn ich Docker verwenden muss, geht etwas an der Server -Seitenbindung schief zu.FROM gcc:11.4

# Crea una cartella per l'app
RUN mkdir -p /opt/app
WORKDIR /opt/app

# Copia i file del server
COPY server.c /opt/app

# Compila il server e collega la libreria pthread
RUN gcc -o server.out server.c -lpthread

# EXPOSE 9200

CMD ["./server.out"]
< /code>
Dies ist die Dockerfile.client: < /p>
FROM gcc:11.4

# Crea una cartella per l'app
RUN mkdir -p /opt/app
WORKDIR /opt/app

# Copia i file del client
COPY client.c /opt/app

# Compila il client e collega la libreria pthread
RUN gcc -o client.out client.c -lpthread

CMD ["./client.out"]
< /code>
Und schließlich mein Docker -Komponieren ist Folgendes: < /p>
version: '3'
services:
server:
build:
context: .
dockerfile: Dockerfile.server
container_name: my_server
# ports:
# - "9000:9100" # Espone la porta del server sulla macchina host
volumes:
- /tmp/my_socket:/tmp/my_socket # Condivide il socket file

client:
build:
context: .
dockerfile: Dockerfile.client
container_name: my_client
depends_on:
- server # Il client parte solo dopo che il server è pronto
volumes:
- /tmp/my_socket:/tmp/my_socket # Usa lo stesso socket file
< /code>
Der Fehler, den Docker mir gibt, wenn ich versuche, Docker komponieren -Das Gebäude ist so: < /p>
[+] Running 3/3
✔ Network progettotrislso_default Created 0.1s
✔ Container my_server Created 0.2s
✔ Container my_client Created 0.3s
Attaching to my_client, my_server
my_client | Errore connect: Connection refused
my_client exited with code 1
my_server | Server in esecuzione...
my_server | Errore bind strano: Address already in use
my_server exited with code 1
< /code>
Ich kann den Client -Fehler verstehen, aber warum der Serverfehler? Auf meinem Ubuntu funktioniert es gut, was passiert? Hat das mit den Docker -Bänden zu tun?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post