docker: failed to connect to the docker API at unix:///Users/triumph/.docker/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /Users/triumph/.docker/run/docker.sock: connect: no such file or directory

Run ‘docker run --help’ for more information
在这里插入图片描述

Unable to find image ‘ubuntu:15.10’ locally
docker: Error response from daemon: failed to resolve reference “docker.io/library/ubuntu:15.10”: failed to do request: Head “https://registry-1.docker.io/v2/library/ubuntu/manifests/15.10”: EOF
在这里插入图片描述
在这里插入图片描述

docker rmi -f ubuntu:15.10//彻底删除镜像而不是删除容器(因为命令里面有一个i)
#删除容器的命令
docker rm -f 容器
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a

docker stop 容器ID/容器名字 #都可以停止容器

为什么每次使用docker run都会创建一个新的实例
简单来说:因为 docker run 的设计初衷就是“从蓝图启动一个全新的、隔离的实例”。
如果您再次 docker run,您肯定不希望进入一个已经被修改过的、充满之前实验痕迹的环境。
每次创建新实例保证了环境的纯净和隔离,避免了依赖冲突和配置污染。

如果您想「重复进入」同一个容器,应该怎么做?

# 1. 启动一个已存在的、处于停止状态的容器
docker start <容器名或ID>

# 2. 然后附加到它的终端进行交互
docker attach <容器名或ID>

# 或者将上面两步合二为一:
docker start -ai <容器名或ID>

下面图片的意思是创建一个新的容器,进入里面在内部进行交互
在这里插入图片描述
总结当我们想和以前容器的终端进行操作
docker pull postgres:latest(先拉取镜像,后面才能开启镜像)

  1. docker run -i -t ubuntu:22.04 /bin/bash(开启一个终端,并进行交互)
  2. docker start -ai 240a9b0b853e (以后再进入这个容器内的时候就可以直接用了)
  3. 或者你启动了容器后,docker attach 容器ID/容器名字

1.挂载
在 Docker 中,挂载(Mounting) 的本质和操作系统是一样的,但目的更具体:把宿主机(你的电脑或服务器)上的文件或文件夹,连接到容器内部的一个目录,让容器能读写宿主机上的数据。实现数据持久化。

docker run -d \
  --name timescaledb \   \\需要注意一下的事情相当于是给当前的容器命名
  -v /home/cm3d/timescaleData:/home/postgres/pgdata/data \
  -e POSTGRES_PASSWORD=mysecret \
  -p 5432:5432 \


-v /home/cm3d/timescaleData:/home/postgres/pgdata/data
   ↑                          ↑
   宿主机路径                  容器内路径
   (source)                   (target)

Docker 容器是一个隔离的虚拟环境,容器里的文件默认都存在容器内部虚拟磁盘,一旦容器被删除,里面所有数据库、日志数据会全部消失。
-v A:B 挂载就是打通宿主机(你的服务器)和容器内部的目录通道:
A:宿主机真实路径(服务器硬盘上的文件夹 / 文件)
B:容器内部访问的路径
容器读写 B 里的文件,实际操作的是服务器硬盘上 A 的文件,实现数据持久化、文件共享、时区同步。

2.docker start -ai container 为什么进入linux容器的shell,进入不了数据库的shell

  • 数据库容器的主进程是数据库服务本身,而不是 shell。docker start -ai 会附加到容器的主进程(通常是
    MySQL、PostgreSQL 等数据库程序)
  • docker exec -it 3d7e767f33d9(镜像的ID或者就是镜像的名字)/bin/sh 使用这个可以
    这个命令是进入已经存在的容器,不是拉取新镜像。

docker-compose.yaml

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐