ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unix socket share different docker

2021-07-30 15:34:28  阅读:231  来源: 互联网

标签:domain data1 share unix client docker root


 

unix server 

root@ubuntu:~/docker# docker run -it --name debian  -v /data1/unix_domain:/data1/unix_domain debian
root@b1a3bef38722:/# ls
bin  boot  data1  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  server  srv  sys  tmp  usr  var

 

 

unix client 

root@ubuntu:~/docker# docker run -it --name debian2  -v /data1/unix_domain:/data1/unix_domain debian
root@d92cea9a459c:/# ls
bin  boot  client  data1  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

 

docker cp server 和client

root@ubuntu:~/docker/unix-domain-socket-example# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b1a3bef38722        debian              "bash"                   23 seconds ago      Up 22 seconds                           debian
176fb79cdcef        nginx:1.17.4        "nginx -g 'daemon of…"   3 weeks ago         Up 3 weeks          80/tcp              test-vm
root@ubuntu:~/docker/unix-domain-socket-example# docker cp bin/server debian:/
root@ubuntu:~/docker/unix-domain-socket-example# docker cp bin/client debian2:/
root@ubuntu:~/docker/unix-domain-socket-example# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d92cea9a459c        debian              "bash"                   2 minutes ago       Up 2 minutes                            debian2
b1a3bef38722        debian              "bash"                   4 minutes ago       Up 4 minutes                            debian
176fb79cdcef        nginx:1.17.4        "nginx -g 'daemon of…"   3 weeks ago         Up 3 weeks          80/tcp              test-vm
root@ubuntu:~/docker/unix-domain-socket-example# 

 

run server

root@b1a3bef38722:/# ./server
recvfrom: iccExchangeAPDU

 

root@ubuntu:~/docker/unix-domain-socket-example# docker exec -it debian bash
root@b1a3bef38722:/# ls /data1/unix_domain/
server.sock
root@b1a3bef38722:/# 

 

run client 

root@d92cea9a459c:/# ./client
sent iccExchangeAPDU
receive 15 transmit good!
root@d92cea9a459c:/# 

 

宿主机上

root@ubuntu:~/docker/unix-domain-socket-example# ls /data1/unix_domain/
server.sock
root@ubuntu:~/docker/unix-domain-socket-example# docker exec -it debian bash
root@b1a3bef38722:/# ls /data1/unix_domain/
server.sock
root@b1a3bef38722:/# 

 

一对多

server

root@ubuntu:~/docker# docker run -it --name debian_s  -v /data1/unix_domain:/data1/unix_domain debian
root@c66e0ec0c311:/# ./server 
recvfrom: iccExchangeAPDU
recvfrom: iccExchangeAPDU

 

root@ubuntu:~/docker# docker run -it --name debian_s  -v /data1/unix_domain:/data1/unix_domain debian
root@c66e0ec0c311:/# ./server 
recvfrom: iccExchangeAPDU
recvfrom: iccExchangeAPDU
recvfrom: /data1/unix_domain/client.sockclient2
recvfrom: /data1/unix_domain/client.sockclient3
recvfrom: /data1/unix_domain/client.sockclient2
recvfrom: /data1/unix_domain/client.sockclient3

 

client1

root@ubuntu:~/docker# docker run -it --name debian2  -v /data1/unix_domain:/data1/unix_domain debian
root@7369904e52f4:/# ls
bin  boot  client  data1  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@7369904e52f4:/# ./client client2
sent iccExchangeAPDU
receive 15 transmit good!

 

root@7369904e52f4:/# ./client client2
sent /data1/unix_domain/client.sockclient2
receive 15 transmit good!

 

client2

root@ubuntu:~# docker run -it --name debian3  -v /data1/unix_domain:/data1/unix_domain debian
root@6373fc51aeae:/# ./client client3
sent iccExchangeAPDU
receive 15 transmit good!

 

root@6373fc51aeae:/# ./client client3
sent /data1/unix_domain/client.sockclient3
receive 15 transmit good!

 

查看套接字

 

root@ubuntu:~# ls /data1/unix_domain/
root@ubuntu:~# ls /data1/unix_domain/
client.sockclient2  client.sockclient3  server.sock
root@ubuntu:~# 

 

client 代码

unix-domain-socket-example

 

#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include "ipc.h"

int main(int argc, char *argv[]) {
        int fd;
        struct sockaddr_un addr;
        int ret;
        char buff[8192];
        struct sockaddr_un from;
        int ok = 1;
        int len;
        char buffer[128];

        if ((fd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0) {
                perror("socket");
                ok = 0;
        }

        if (ok) {
                memset(&addr, 0, sizeof(addr));
                snprintf(buffer,sizeof(buffer)-1,"%s%s",CLIENT_SOCK_FILE,argv[1]);
                addr.sun_family = AF_UNIX;
                strcpy(addr.sun_path, buffer);
                unlink(buffer);
                if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
                        perror("bind");
                        ok = 0;
                }
        }

        if (ok) {
                memset(&addr, 0, sizeof(addr));
                addr.sun_family = AF_UNIX;
                strcpy(addr.sun_path, SERVER_SOCK_FILE);
                if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
                        perror("connect");
                        ok = 0;
                }
        }

        if (ok) {
                //strcpy (buff, "iccExchangeAPDU");
                if (send(fd, buffer, strlen(buffer)+1, 0) == -1) {
                        perror("send");
                        ok = 0;
                }
                printf ("sent %s\n", buffer);
        }

        if (ok) {
                if ((len = recv(fd, buff, 8192, 0)) < 0) {
                        perror("recv");
                        ok = 0;
                }
                printf ("receive %d %s\n", len, buff);
        }

        if (fd >= 0) {
                close(fd);
        }

        getchar();
        unlink (buffer);
        return 0;
}

 

标签:domain,data1,share,unix,client,docker,root
来源: https://www.cnblogs.com/dream397/p/15079844.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有