1. 运行导出的镜像报错:docker: Error response from daemon: No command specified.
上传了web到NGINX,通过 docker export -o mynginx.tar [contianer id]
构建出container文件,将文件拷贝到另一台装有docker的机器,运行docker import mynginx.tar
得到
repository跟tag字段都是没有数据的,原来docker import 也有额外的参数
但是通过该镜像启动容器又报错了
docker: Error response from daemon: No command specified.
查阅资料知道,运行导入的镜像必须带上command参数。但是通过docker ps查看是省略号
换个命令docker ps --no-trunc
查看完整的命令,最后运行该镜像的容器带上command参数,成功运行
2. 执行docker load -i nuxt.tar后 repository tag 都为none
我以为load跟import一样可以有额外的参数,于是乎docker load -i nuxt.tar nuxt
,然后
需要在docker save的时候加上参数docker save -o nuxt.tar nuxt:1.0.0
冒号后面的tag版本必须是存在的,不然也没法正确执行。如果需要改镜像名称跟版本号可以使用docker tag [镜像id] [新镜像名称]:[新镜像标签]
3. volume设置后对应的宿主机目录删除,则需要重新关联
比如
docker-compose.yaml
version: "3.8"
services:
cloud:
image: cloud:latest
volumes:
- /data/dist:/app/web
然后我将宿主机中的dist目录删掉,重新建个dist目录,这个时候容器是读不到该目录的,遇到这种情况怎么办?
- 不删除宿主机的dist目录,而是替换里面的内容
- 停掉该容器,重新运行
docker-compose up -d
4. 多个docker-compose.yml 共享网络 实现通信
我有两个站点,都是前后端分离的项目,为了使两个站点使用同一个mariadb,需要两个不同的docker-compose中的容器通信
站点a
docker-compose.yamlversion: "3" networks: aa-web: driver: bridge services: mariadb: image: mariadb ports: - 3306:3306 restart: always container_name: mariadb environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: testDB MYSQL_USER: ee MYSQL_PASSWORD: 123456 volumes: - ./db/initdb.d:/docker-entrypoint-initdb.d networks: - aa-web front-rest: build: ../aa-fe-rest container_name: front-rest restart: always ports: - 3465:3465 depends_on: - mariadb networks: - aa-web front-nuxt: build: ../aa-nuxt restart: always ports: - 8643:8643 depends_on: - front-rest networks: - aa-web nginx-web: build: ../nginx-web restart: always ports: - 80:80 - 443:443 depends_on: - front-nuxt networks: - aa-web
站点b
docker-compose.yamlversion: "3" services: bb-front-rest: build: ../bb-fe-rest container_name: bb-front-rest restart: always ports: - 8536:8536 networks: - docker-compose-bb_bb-web external_links: - mariadb bb-front-nuxt: build: ../bb-nuxt-first container_name: bb-front-nuxt restart: always ports: - 2683:2683 depends_on: - bb-front-rest networks: - docker-compose-bb_bb-web external_links: - mariadb networks: docker-compose-bb_bb-web: external: true
在站点a中建立了网络aa-web 然后在站点b中配置网络
networks: docker-compose-bb_bb-web: external: true
docker-compose-bb_bb-web这个名字可以根据docker network ls 命令或者docker network inspect docker-compose-bb_bb-web 查看具体哪些容器在使用。这样我们就可以在b站点使用同一个mariadb了。容器之间通信可以直接用容器名,而不是ip地址。
5. Dockerfile RUN npm install yarn -g 报错
FROM node:14 as builder
WORKDIR /home/geek
COPY package*.json ./
COPY yarn.lock ./
RUN npm install yarn -g
RUN yarn
RUN yarn build
解决办法:
直接删除RUN npm install yarn -g
node的docker镜像安装了yarn
EEXIST: file already exists for installing npm package globally in Dockerfile
5. 将本地镜像推送到私有仓库
注册私有仓库地址
/etc/docker/daemon.json { "insecure-registries": ["192.81.236.87:8765"] }
如果私有仓库设置里密码,则需要登录
docker login 192.81.236.87:8765
分别输入用户名密码,登录成功后,后面推送镜像就不需要输入用户名密码了;如果没设置密码则不需要登录。构建本地镜像
docker build -t geek:0.0.1 .
对本地镜像打tag
docker tag geek:0.0.1 192.81.236.87:8765/geek:0.0.1
将镜像推送到私有仓库
docker push 192.81.236.87:8765/geek:0.0.1
6. docker compose 重新创建容器
有四个容器,ragflow-server被我玩坏了,我想给予image重新创建该容器。
docker-compose down service_name
docker-compose up -d service_name
在使用 Docker Compose 时,如果你需要重新创建容器,通常有几种方法可以实现:
使用
docker-compose up
命令:
如果你只是想启动服务,可以使用docker-compose up
命令。如果容器已经存在,Docker Compose 会尝试重启它们。docker-compose up
使用
docker-compose up -d
命令:
如果你的服务需要在后台运行,可以加上-d
参数来启动服务。docker-compose up -d
使用
docker-compose down
命令:
如果你需要完全停止并移除服务中的所有容器,可以使用docker-compose down
命令。之后,你可以再次使用docker-compose up
来重新创建和启动容器。docker-compose down docker-compose up
使用
docker-compose down
和docker-compose up
重新创建特定服务:
如果你只想重新创建特定的服务而不是整个应用,可以指定服务名称。docker-compose down service_name docker-compose up -d service_name
使用
docker-compose restart
命令:
如果你需要重启所有服务中的容器,可以使用docker-compose restart
命令。docker-compose restart
使用
docker-compose build
命令:
如果你对Dockerfile
或docker-compose.yml
文件做了更改,并且需要重新构建镜像,可以使用docker-compose build
命令。之后,使用docker-compose up
来重新创建容器。docker-compose build docker-compose up
使用
docker-compose up --force-recreate
命令:
如果你需要强制重新创建所有服务中的容器,即使它们的配置和镜像没有改变,可以使用--force-recreate
标志。docker-compose up --force-recreate
请根据你的具体需求选择合适的命令。如果你只是想重新创建容器而不需要重新构建镜像,通常使用 docker-compose down
和 docker-compose up
就足够了。如果你做了代码更改或更新了配置,可能需要先使用 docker-compose build
来重新构建镜像。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。