Solution to slow network request in docker container

Solution to slow network request in docker container

Several problems were discovered during the use of Docker. Network requests in Docker often failed, such as npm install and bundle install operations. Or, as an intermediate layer, the process of obtaining API data in the application often resulted in timeouts. Therefore, we began to explore the network mechanism of Docker to solve the problem of slow network requests.

1. Docker network mode

1. none

When configured as none, the Docker container network cannot have input or output and is isolated from the world.

2. Bridge
The default mode is bridge. Docker has its own virtual network card and obtains the network from the host through bridging.

3. Host
When specified as host, the host's network card is directly exposed to the container, and the container can access the Internet directly through the host's network. For example, if you want to get the redis service 127.0.0.1:6357 on the host, you have to use this method, but it is less secure.

4. Container
Using other container's network

2. Docker DNS resolution

The Docker container is essentially a Linux, so the DNS resolution method is the same as Linux, and the priority is to find the /etc/hosts file. Domain names such as localhost are written in this file, for example:

127.0.0.1 localhost

If the docker container links other containers, there will be an additional linked domain name, for example:

docker run --name app --link app-redis:redis -d ubuntu

There will be more in hosts

172.17.0.3 app-redis 038c8388e4a1

After finding the /etc/hosts file, then the /etc/resolv.conf file:

domain local
nameserver 192.168.65.1
nameserver 192.168.65.10

3. Solve the problem of slow network requests in docker containers

After packet capture and other analysis, it was found that the slow network request mainly occurred in DNS resolution, so DNS optimization was mainly adopted:

If the request is for your own intranet API, you can directly modify the /etc/hosts file. If the request is for an external network, you can change the nameserver in /etc/resolv.conf.

The docker container is definitely not implemented directly by modifying files, but can be implemented through the run command:

# Add host
docker run --name app --add-host='api.embbnux.com:10.98.10.98' -d ubuntu
# Specify DNS server
docker run --name app --dns=223.5.5.5 --dns=8.8.8.8 -d ubuntu

In this way, the DNS resolution time in the Docker container is accelerated.

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Docker intranet builds DNS and uses domain name access instead of ip:port operation
  • How to directly access the docker for windows container intranet through an independent IP
  • Method for accessing independent IP in Docker container
  • How to build a private server in docker (docker-registry with nginx&ssl on centos)
  • Detailed explanation of building lanproxy intranet penetration service based on docker
  • Steps to deploy multiple tomcat services using DockerFile on Docker container
  • Docker image creation, uploading, pulling and deployment operations (using Alibaba Cloud)
  • Analysis of the implementation process of Docker intranet penetration frp deployment

<<:  CentOS 6.4 MySQL 5.7.18 installation and configuration method graphic tutorial

>>:  React implements a highly adaptive virtual list

Recommend

Detailed explanation of MySQL transactions and MySQL logs

Transactional Characteristics 1. Atomicity: After...

Deployment and configuration of Apache service under Linux

Table of contents 1 The role of Apache 2 Apache I...

Linux tac command implementation example

1. Command Introduction The tac (reverse order of...

The webpage cannot be opened because the div element lacks a closing tag

At first I thought it was a speed issue, so I late...

jQuery realizes image highlighting

It is very common to highlight images on a page. ...

Introduction to html form control disabled attributes readonly VS disabled

There are two ways to disable form submission in ...

Basic usage examples of listeners in Vue

Table of contents Preface 1. Basic usage of liste...

Detailed explanation of Nginx timeout configuration

I recently used nginx in a project, and used Java...

Detailed process of drawing three-dimensional arrow lines using three.js

Demand: This demand is an urgent need! In a subwa...

Detailed explanation of views in MySQL

view: Views in MySQL have many similarities with ...

Summary of various methods of implementing article dividing line styles with CSS

This article summarizes various ways to implement...

How to delete extra kernels in Ubuntu

Step 1: View the current kernel rew $ uname -a Li...

Vue implements the frame rate playback of the carousel

This article example shares the specific code of ...