# 基于官方的 openjdk:8-jdk-slim 镜像构建
FROM openjdk:8-jdk-slim
# 更新源列表
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
apt-get update
# 安装必要的软件包
RUN apt-get install -y \
curl \
default-mysql-client \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /app
# 将项目文件复制到容器中
COPY ./spring-0.0.1-SNAPSHOT.jar /app
# 添加执行权限
RUN chmod +x /xxx/docker_backup.sh
# 暴露应用程序端口
EXPOSE 8080
# 启动应用程序
CMD ["java", "-jar", "spring-0.0.1-SNAPSHOT.jar"]
root@d31e5e724869:/app# docker exec $mysql_docker_name mysqldump -u root -p$password -h localhost db_name> /home/backup.sql
bash: docker: command not found
错误消息 “bash: docker: command not found” 表示 Docker 命令在 Docker 容器内不可用。
因为 Docker 通常安装在主机系统上,而不是容器内。容器在隔离的环境中运行,通常默认情况下无法直接访问主机上的 Docker 命令。
如果需要在 Docker 容器内执行 Docker 命令,可以使用 Docker-in-Docker (DinD) 或 Docker outside of Docker (DooD) 方法。通常不建议在 Docker 容器内运行 Docker 命令。
两种方法的简要解释:
Docker-in-Docker (DinD): 涉及在 Docker 容器内运行 Docker 守护进程。它允许你从一个容器内构建和运行其他容器。但要正确设置它可能会有一定挑战,而且可能存在安全问题。
Docker outside of Docker (DooD): 将主机上的 Docker 套接字挂载到容器中。容器内的 Docker CLI 与主机上的 Docker 守护进程进行交互,从容器内控制主机上的 Docker。比 DinD 更安全。
修改 Docker 运行命令: 更新你的 docker run 命令,将主机上的 Docker 套接字挂载到容器中。替换现有的 docker run 命令如下:
docker run -d --name xxx-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \ # 挂载 Docker 套接字
xxx
-v /var/run/docker.sock:/var/run/docker.sock,允许容器内的 Docker CLI 与主机上的 Docker 守护进程通信。mysqldump -u root -pxxx -h mysql_docker_name db_name > /home/backup.sql
使用脚本备份
# 添加执行权限
RUN chmod +x /usr/docker_backup.sh
如果 MySQL 和 program容器在同一个 Docker 网络中,并且想从 program容器中连接到 MySQL 容器来执行备份命令,你可以通过容器名称进行连接。
在 Docker 网络中,容器可以通过它们的名称进行通信。
2.在 program 容器中执行备份命令: 在 docker_backup.sh 脚本中,可以使用 MySQL 容器的名称来执行备份命令。
#!/bin/bash
# -h mysql_docker_name 意味着使用 xxx 作为主机名进行连接
mysqldump -u root -pxxx -h mysql_docker_name db_name > /home/backup/backup.sql
mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)" when trying to connect mysql报错2023-10-18T09:53:48.190738Z 82 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
mysqldump -u root -p$your_password --default-character-set=utf8mb4 -h $mysql_host $db_name > /home/backup.sql
CREATE USER 'your_user'@'%' IDENTIFIED WITH 'caching_sha2_password' BY 'your_password';
ALTER USER 'your_user'@'%' IDENTIFIED WITH 'caching_sha2_password' BY 'your_password';