Я использовал программу C для имитации сервера для связи. Когда я пытаюсь превратить эту программу C в образ docker и запустить контейнер, возникает эта ошибка: Ошибка привязки: Невозможно назначить запрошенный адрес
Я пытаюсь создать docker изображение из файла Docker следующим образом:
gcc -static server.c -o server
vi Dockerfile
FROM scratch
ADD server /
CMD ["/server"]
docker build -t testserver
docker run testserver
Ошибка привязки: невозможно назначить запрошенный адрес
docker logs testserver
Ошибка: Нет такого контейнера: testserver
Это сервер . c код
#define MAX_BUF 1024
#define SERVER_PORT 60000
#define SERVER_IP " /Intranet IP/ "
void single_client(int fd)
{
char recvBuf[MAX_BUF], sendBuf[MAX_BUF];
int bytesOfRecv;
for (;;)
{
memset(recvBuf, 0, MAX_BUF);
bytesOfRecv = recv(fd, recvBuf, MAX_BUF, 0);
if (bytesOfRecv < 0)
{
perror("Recv error");
continue;
}
else if (bytesOfRecv == 0)
{
printf("Client has disconnected...\n");
close(fd);
break;
}
recvBuf[bytesOfRecv] = '\0';
printf("Data received is %s\n", recvBuf);
memcpy(sendBuf, recvBuf, MAX_BUF);
send(fd, sendBuf, MAX_BUF, 0);
}
}
int main()
{
pid_t pid;
int lfd, cfd;
struct sockaddr_in serverAddr, clientAddr;
socklen_t cliAddrLen = sizeof(clientAddr);
lfd = socket(AF_INET, SOCK_STREAM, 0);
if (lfd < 0)
{
perror("Socket error");
exit(1);
}
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(SERVER_PORT);
serverAddr.sin_addr.s_addr = inet_addr(SERVER_IP);
int opt = 1;
int ret = setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, (void *) &opt, sizeof(opt));
if (ret < 0)
{
perror("Setsockopt error");
exit(1);
}
if ((bind(lfd, (struct sockaddr *) &serverAddr, 16)) < 0)
{
perror("Bind error");
exit(1);
}
if (listen(lfd, SOMAXCONN) < 0)
{
perror("Listen error");
exit(1);
}
printf("Waiting...\n");
for (;;)
{
//Accept
cfd = accept(lfd, (struct sockaddr *) &clientAddr, (socklen_t *) &cliAddrLen);
if (cfd < 0)
{
perror("Accept error");
continue;
}
printf("Connected from %s:%d\n", inet_ntoa(clientAddr.sin_addr), htons(clientAddr.sin_port));
if ((pid = fork()) == 0)
{
single_client(cfd);
close(cfd);
exit(0);
}
close(cfd);
}
return 0;
}