Docker问题记录

Sunmy Lv5

docker 运行直接报错

WARNING: IPv4 forwarding is disabled. Networking will not work.

第一步:在宿主机上执行

1
[root@localhost /]# echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf

第二步:重启 network 和 docker 服务

1
[root@localhost /]# systemctl restart network && systemctl restart docker

第三步:验证是否成功

Docker 已存在的容器,怎么添加新端口号

查看容器端口映射情况

1
docker port 容器ID

image.png

查询容器在本机位置

1
docker inspect 容器ID | grep 容器ID

image.png

  • 进入容器目录需修改 2 个文件
    • config.v2.json
    • hostconfig.json

备份原始配置

为了保证安全,我们修改配置后容器出问题,建议把之前的配置文件备份下:

image.png

备份文件

image.png

如果容器运行出问题就把备份文件名称后面的.bak 去掉

关闭 docker 进程

1
2
3
$ service docker stop

$ systemctl stop docker

运行完关闭命令后查看

image.png

再次查看 docker 进程是否还在运行

1
ps -aux | grep docker

image.png

注意:此时由上述命令运行结果可以看出没有在运行,就不要再运行 Docker 的命令,不然程序会自动启动

修改配置文件

修改 config.v2.json

  1. 修改 config.v2.json 查看内部 json 数据

image.png

  1. 可以把 json 复制到在线网站去格式化,看起来美观些,格式化后我们找到 Config->ExposedPorts 里面添加想要的端口号格式为
1
$ "自己需要的端口/tcp"

image.png

  1. 修改到配置文件中

image.png

修改配置 hostconfig.json

  1. 修改 vim hostconfig.json 查看内部 json 数据
  2. 找到 PortBindings 参数内添加信息

image.png

  1. 修改自己需要绑定的端口信息,格式为
1
2
3
4
5
6
"容器内部的端口/tcp":[
{
"HostIp": "",
"HostPort": "绑定宿主机的端口"
}
]

image.png

  1. 配置信息后添加保存

image.png

启动 Docker

1
2
3
service docker start

systemctl restart docker

查看容器端口映射信息

1
docker port 容器ID

image.png

一键安装

1
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh)

参考链接

https://blog.csdn.net/qq_45502336/article/details/126135157

image.png

docker cli 部署的容器和 docker compose 部署的容器(自定义网络),双方内部如何才能互相 ping 通

Docker CLI 部署的容器和 Docker Compose 部署的容器,内部网络默认是使用 Docker 网桥,它们在同一个网络中,因此可以相互访问。假设有一个由 Docker Compose 部署的容器应用程序(自定义网络),它的服务名为 web,暴露了一个 HTTP 服务。现在我们想从由 Docker CLI 部署的容器中访问该服务。

确定 Docker Compose 容器所在的网络

Docker Compose 会为应用程序创建一个默认网络。我们可以使用以下命令来查看该网络:

1
docker network ls
  1. 找到应用程序的网络名称,例如 myapp_default。
1
2
3
4
5
6
7
8
9
10
11
12
root@VM-24-11-ubuntu:/data/docker/mysql# docker-compose up -d
Creating network "mysql_default" with the default driver
Creating mysql_phpmyadmin_1 ... done
Creating mysql_db_1 ... done
root@VM-24-11-ubuntu:/data/docker/mysql# docker network ls

NETWORK ID NAME DRIVER SCOPE
20f53b127fad bridge bridge local
667cea2f4d50 host host local
6051526b2b77 mysql_default bridge local
eb37be31f571 none null local
d5453e31729c wordpress_default bridge local

连接到 Docker Compose 容器所在的网络

使用以下命令连接到 Docker Compose 容器所在的网络:

1
docker network connect myapp_default <docker_cli_container_name>

其中,myapp_default 是应用程序的网络名称,<docker_cli_container_name> 是 Docker CLI 部署的容器名称。

1
root@VM-24-11-ubuntu:/data/docker/mysql# docker network connect mysql_default vscode-server(docker cli部署容器)

测试容器之间的连通性

现在我们可以从 Docker CLI 部署的容器中使用 ping 命令测试与 Docker Compose 容器之间的连通性:

1
docker exec <docker_cli_container_name> ping <docker_compose_container_name>

其中,<docker_cli_container_name> 是 Docker CLI 部署的容器名称,web 是应用程序中的服务名称。如果一切正常,你应该能够看到类似以下的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@VM-24-11-ubuntu:/data/docker/mysql# docker exec vscode-server ping mysql_db_1
PING mysql_db_1 (172.25.0.2) 56(84) bytes of data.
64 bytes from mysql_db_1.mysql_default (172.25.0.2): icmp_seq=1 ttl=64 time=0.098 ms
64 bytes from mysql_db_1.mysql_default (172.25.0.2): icmp_seq=2 ttl=64 time=0.063 ms
64 bytes from mysql_db_1.mysql_default (172.25.0.2): icmp_seq=3 ttl=64 time=0.061 ms
^C
root@VM-24-11-ubuntu:/data/docker/mysql# docker exec vscode-server ping mysql_phpmyadmin_1
PING mysql_phpmyadmin_1 (172.25.0.3) 56(84) bytes of data.
64 bytes from mysql_phpmyadmin_1.mysql_default (172.25.0.3): icmp_seq=1 ttl=64 time=0.087 ms
64 bytes from mysql_phpmyadmin_1.mysql_default (172.25.0.3): icmp_seq=2 ttl=64 time=0.067 ms
64 bytes from mysql_phpmyadmin_1.mysql_default (172.25.0.3): icmp_seq=3 ttl=64 time=0.095 ms
64 bytes from mysql_phpmyadmin_1.mysql_default (172.25.0.3): icmp_seq=4 ttl=64 time=0.063 ms
^C
root@VM-24-11-ubuntu:/data/docker/mysql# ^C

注意,如果你的应用程序使用了自定义网络,你需要使用自定义网络名称代替默认名称。同时,还需要确保 Docker Compose 和 Docker CLI 部署的容器都在同一个网络中

普通用户如何执行 docker 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.创建docker用户组
[admin@Centos8 local]$ sudo groupadd docker
2.将admin用户填进docker组中
[admin@Centos8 local]$ sudo gpasswd -a ${USER} admin
3.重启docke服务
[admin@Centos8 local]$ sudo service docker restart
Redirecting to /bin/systemctl restart docker.service
[admin@Centos8 local]$ docker ps
4.如果普通用户执行docker命令,如果提示get …… dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限
使用root用户执行如下命令,即可
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
[admin@Centos8 local]$ sudo chmod a+rw /var/run/docker.sock
[admin@Centos8 local]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[admin@Centos8 local]$
  • 标题: Docker问题记录
  • 作者: Sunmy
  • 创建于 : 2023-06-30 16:56:57
  • 更新于 : 2025-06-29 21:05:24
  • 链接: https://ldspdvsun.github.io/cmchvp8g00025h0gbdebc9tre/
  • 版权声明: 版权所有 © Sunmy,禁止转载。
评论