文章

Docker镜像基础操作

Docker镜像操作命令

登陆镜像仓库

docker login docker.hub -u <user> (回车输入密码)

拉取

docker pull docker.hub/库名/镜像名:tag

导出

docker save -o rustdesk-server-latest.tar rustdesk/rustdesk-server:latest

导入

docker load < rustdesk-server-latest.tar

上传

docker push docker.hub/库名/images:tag

快速关闭所有运行的容器

for i in $(docker ps | awk 'NR>1 {print $1}'); do docker stop $i;done && docker ps

快速关闭并删除所有本地容器

for i in $(docker ps -a | awk 'NR>1 {print $1}'); do docker stop $i && docker rm $i;done && docker ps -a

快速删除所有本地镜像

  for i in $(docker images | awk 'NR>1 {print $3}'); do docker rmi -f $i;done && docker images

快速进入指定的容器中

docker exec -it $(docker ps -a |grep 容器名称|awk '{print $1}') /bin/bash

清除登陆用户名密码记录

docker logout && rm -f ~/.docker/config.json

解决docker网络冲突

创建容器时,使用已存在的网络

docker run

  1. 直接指定网络名称 在运行容器时,通过 --network 参数直接指定已存在的网络名称即可。例如:

    docker run -d --name my-container --network existing_network my-image
  2. 验证网络连接 通过 docker network inspect existing_network 可查看容器是否已加入该网络。若容器已存在,也可通过 docker network connect 动态连接:

    docker network connect existing_network my-container

dockerfile

Dockerfile 本身不直接管理网络配置,但可通过以下方式间接实现:

  1. 在 Dockerfile 中定义默认网络参数(可选) 虽然无法在 Dockerfile 中直接绑定网络,但可通过环境变量或脚本预设网络名称,例如:

    ENV NETWORK_NAME=existing_network

    后续在 docker run 时通过 --network $NETWORK_NAME 调用。

  2. 构建镜像后运行时指定网络 实际运行时仍需依赖 docker run--network 参数,例如:

    docker build -t my-image .
    docker run -d --network existing_network my-image

docker compose

  1. 声明外部网络 docker-compose.yml 中,通过 external: true 引用已存在的网络:

    services:
      my-service:
        image: my-image
        networks:
          - existing_network
    ​
    networks:
      existing_network:
        external: true
        name: existing_network  # 显式指定名称(可选)
  2. 多项目共享网络 若需跨多个 Compose 项目共享同一网络,需先手动创建网络:

    docker network create --driver bridge existing_network

    然后在各项目的 Compose 文件中均声明 external: true

  1. 注意:

    1. 确保 Compose 文件中指定的网络驱动(如 bridgeoverlay)与已存在网络一致

    2. 同一网络内的容器可通过服务名称(Compose 服务名或容器名)直接通信,无需依赖 IP 地址。

License:  CC BY 4.0