Docker service endpoint with name xxx already exists.
使用docker部署服务,启动容器时有时会遇到如标题上的这种报错。
意思是这个端口已经被名为xxx的容器占用了。 而执行 docker ps 又找不到这个容器,这种情况,通常是xxx容器没有正常删除导致的。
1.查看容器
docker ps -a
2.删除容器
docker rm -f xxx
3.删除容器占用的端口
docker network disconnect --force 网络模式 容器名称
// docker network disconnect --force bridge xxx
4.删除无用的镜像images
docker image prune -a -f
5.运行一个临时容器,目的是为了将配置、数据、日志等信息存储到宿主机上,停止会把此容器自动删除
docker run --rm -d --name=temp-ch yandex/clickhouse-server
6.拷贝容器内的文件:
docker cp temp-ch:/etc/clickhouse-server/ /etc/
要查看启动命令的容器id 99fa3b77c1e7
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike 99fa3b77c1e7
docker inspect xxxx
Docker中与镜像操作相关的命令都在docker image这条子命令下,通过docker image --help这条命令,可以看到docker image子命令的详细文档,如下:
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile(构建镜像的命令)
history Show the history of an image(显示镜像构建历史过程)
import Import the contents from a tarball to create a filesystem image(导入一个由容器导出的镜像)
inspect Display detailed information on one or more images(显示一个镜像的详细信息)
load Load an image from a tar archive or STDIN(从一个文件或标准输入流中导入镜像)
ls List images(查看镜像列表)
prune Remove unused images(删除虚悬镜像)
pull Pull an image or a repository from a registry(从仓库拉取镜像)
push Push an image or a repository to a registry(推送镜像到仓库)
rm Remove one or more images(删除镜像)
save Save one or more images to a tar archive (streamed to STDOUT by default)(保存镜像到文件)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE(给镜像打标签)
docker save : 将指定镜像保存成 tar 归档文件。
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
docker load : 导入使用 docker save 命令导出的镜像。
docker load -i my_ubuntu_v3.tar
Usage: docker container COMMAND
Manage containers
Commands:
attach Attach local standard input, output, and error streams to a runnin g container
commit Create a new image from a container's changes(把容器保存为镜像)
cp Copy files/folders between a container and the local filesystem
create Create a new container(创建一个新的容器)
diff Inspect changes to files or directories on a container's filesyste m
exec Run a command in a running container(在一个运行的容器中执行命令)
export Export a container's filesystem as a tar archive
inspect Display detailed information on one or more containers
kill Kill one or more running containers(杀死一个或多个正在运行的容器)
logs Fetch the logs of a container
ls List containers(显示本地容器列表)
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
prune Remove all stopped containers
rename Rename a container(重命名容器)
restart Restart one or more containers(重启一个或多个容器)
rm Remove one or more containers(删除一个或多个容器)
run Run a command in a new container(运行一个新的容器)
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers(停止一个或多个容器)
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
wait Block until one or more containers stop, then print their exit codes
#启动命令
docker run --name springboot-demo1 -p 8080:8080 -t springboot-demo
docker run image_name echo "hello word"
docker run -d --restart=always --log-driver json-file --log-opt max-size=500m --log-opt max-file=2 -v /data0/${name}/logs:/data/logs --name ${name} --net="host" --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 2048M --memory-swap 2304M -e JAVA_OPTS="-server -Xmx1280m -Xss512k -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=256m" registry.api.fzy.com/bop-k8s/${name}:${build_version}
#交互式进入容器中
docker run -i -t image_name /bin/bash
#在容器中安装新的程序
docker run image_name yum install -y app_name
#Note:在执行 yum命令的时候,要带上-y参数。如果不指定-y参数的话,yum命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。yum 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
--oom-kill-disable=true : 禁止容器被oom杀掉,使用该参数要与-m一起使用
docker 限制cpu使用率
限制cpu使用率为50%: --cpu-period=1000000 --cpu-quota=500000
docker 限制cpu使用率
方案一:
--add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32
docker run -d --name test1 \
--add-host test1.a:1.2.3.4 \
local/test
方案二:
docker-compose.yml文件指定
test2:
build: local/test
extra_hosts:
test1.a: 1.2.3.4
test1.b: 4.3.2.1
#从容器里面拷贝文件/目录到本地一个路径
docker cp Name:/container_path to_path
docker cp ID:/container_path to_path
1、从容器里面拷文件到宿主机?在宿主机里面执行以下命令
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
2、从宿主机拷文件到容器里面 在宿主机里面执行如下命令
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
#解压到指定目录文件夹下
unzip -d ./plugis/elasticsearch-analysis-ik-6.6.0 elasticsearch-analysis-ik-6.6.0.zip
#列出当前所有正在运行的container
docker ps
#列出所有的container 包括已停止的容器
docker ps -a
#列出最近一次启动的container或查询最后一次创建的容器
docker ps -l
#docker 查看停止的容器的日志
docker ps -a
然后 docker inspect 对应的容器id
找到 LogPath
查看一个正在运行的Docker容器的启动命令
ocker ps -a --no-trunc
#从一个容器中取日志
#-f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
docker logs Name/ID
#实时查看运行的容器的日志
#例:实时查看docker容器名为s12的最后100行日志
sudo docker logs -f --tail 100 s12
sudo docker logs -f -t --tail 10 s12
查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2021-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
docker logs -t --since="2021-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
docker logs -t --since="2021-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
grep ac8f5e6ab5a19acd SQL-2019-05-13.0.log
#查看linux 内存
free -m
#查看磁盘剩余空间
df -hl
#删除一个或者多个镜像
#-f, --force=false Force; --no-prune=false Do not delete untagged parents
docker rmi image_name
#删除所有容器
docker rm `docker ps -a -q`
#删除单个容器
#-f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container
docker rm Name/ID
#进入docker正在运行的容器环境 需要指定容器的id或name
docker exec -it enrichupgrade /bin/bash
docker exec -it 6d9ae9e18df5 /bin/sh
更新容器的重启策略
docker update --restart=always f361b7d8465
更新容器内存
docker update -m 500M f361b7d8465
更新 CPU 共享数量
docker update --cpu-shares 512 f361b7d8465
查看容器重启次数
docker inspect -f “{{ .RestartCount }}” container-id
查看容器最后一次的启动时间
docker inspect -f “{{ .State.StartedAt }}” container-id
#查看docker版本
docker version
#显示docker系统的信息
docker info
#检索image
docker search image_name
#下载image
docker pull image_name
#列出镜像列表
# -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
docker images
#显示一个镜像的历史
#--no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
docker history image_name
#保存对容器的修改 本地备份
#-a, --author="" Author; -m, --message="" Commit message
docker commit ID new_image_name
docker commit ${name} ${name}-backup
#Note:image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。
#停止、启动、杀死一个容器
docker stop Name/ID
docker start Name/ID
docker kill Name/ID
#重启一个正在运行的容器
#-t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
docker restart Name/ID
#列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
docker diff Name/ID
#显示一个运行的容器里面的进程信息
docker top Name/ID
#附加到一个运行的容器上面
#--no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
docker attach ID
#Note:attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。
#登陆registry server
#-e, --email="" Email; -p, --password="" Password; -u, --username="" Username
docker login
echo "$PASSWORD" | docker login --username foo --password-stdin https://xx.w.com
#根据Dockerfile 构建出一个容器
#build
# --no-cache=false Do not use cache when building the image
# -q, --quiet=false Suppress the verbose output generated by the containers
# --rm=true Remove intermediate containers after a successful build
# -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success
docker build -t image_name Dockerfile_path
docker push registry.aifzy.com/bop-k8s/${name}:release
创建startup.sh脚本文件
touch startup.sh
#编辑文件
vim startup.sh
复制下面内容到startup.sh
#!/bin/bash
appName=demo1
docker stop $appName
sleep 10s
cd /root/docker
docker build -t $appName .
docker run -d --name=$appName -p 8080:8080 -t $appName
#实时查看docker启动日志
docker logs -f --tail 10 $appName
配置脚本文件可执行权限
#按ESC wq 回车保存文件
#设置文件可执行权限
chmod 755 startup.sh
arthas 监控分析:
docker exec -it bop-fms-account-job /bin/sh -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"
dashboard 展示当前进程的信息 ctrl+c可以中断执行
jad --source-only com.wb.bop.fms.account.service.report.impl.AdvertiserdailyServiceImpl
dump文件分析:
进入docker 容器:
docker exec -it 29198c060396 /bin/sh
jmap -dump:format=b,file=dumpfile.dat pid
docker cp 29198c060396:/logs/d.20170726.txt .
本地ip: 10.23.10.63
打开监听:
nc -l 9000 > dumpfile.bin
服务器:
nc 10.23.10.63 9000 < dumpfile.bin
打开JProfiler工具分析
docker stats
Docker中容器的备份、恢复和迁移
Docker 常用指令详解
Docker的三大核心组件:镜像,容器与仓库
Docker镜像的制作、上传、拉取和部署
开发者必备Docker命令