Docker 常见问题
常见问题
Docker Decktop 启动命令行,无 apt 命令
在 Docker Decktop 打开容器操作命令,默认使用的是 sh 命令进入的(打开的窗口名是进入的完整命令),对于使用 bash 命令为基础的容器相当于没有执行环境初始化。才需要执行 bash 来初始化环境。
镜像有那些参数,支持怎样的配置
- 在 hub.docker.com 里查找相关的镜像并查看它的说明
- 通过
docker images inspect --no-trunc <镜像[:标签]>
查看构建命令,关注 EXPOSE、WORKDIR、VOLUME、ENV 的内容
Docker 容器一启动马上自动关闭
容器使用后台运行就必需要一个前台进程,docker发现没有应用,就会自动停止。可以使用 tty 和 /bin/sh 配合防自动关闭
在 docker-compose.yml 里会发现有 tty: true
参数,就是为了解决该问题的
Docker 自定义网站,容器间能 ping 通,但是宿主机 ping 不通容器
网上最多的解决方法是重新生成 docker01 默认网桥,但是我更偏向于系统内核的网桥模块bridge.ko加载失败导致,解决问题的方案是升级内核或升级系统。
因为我的宿主机内核很久没有更新了,后面没有更新成功就没再验证了。
网桥添加删除的 bridge 命令不存在,可以通过 yum install -y bridge-utils
安装。
每个容器依赖的系统是不一样,容器间是怎么配合的
这就是 Docker 和通常的虚拟机不同的点。虚拟机每个都有自己单独的内核,而 docker 使用了宿主机的内核,是借用 Linux 的特性实现的,这也是 docker 需要运行的 linux 上的原因。容器里之所以区分系统主要还是命令之别。
安装好 Docker Desktop 后,启动 Vagrant 报 kernel panic-not sycning: IO-APIC + timer doesn’t work
Docker 依赖于 Linux 系统,而在 Windows 上安装则需要依赖于 Windows 10 里的 wsl2 Linux 子系统。这个系统需要 hyper-V 支持,这个支持和 VirtualBox 不兼容,开启后将不法启动 VirtualBox 上的系统。
个人推荐:如果仅仅是开发运行环境的话,使用 Docker 就不必在意原镜像了,如果需要里面的数据可以关闭 hyper-V 支持,进入虚拟机里把关联的数据文件转移到宿主机中,Docker 容器中映射到指定目录也可以拿到原本的数据。然后弃用原本的虚拟机相关环境。
修改了 Dockerfile 重启后无变化
因为 Dockerfile 文件直接关联的是镜像,而镜像是 build 命令后生成的,所以需要重新生成镜像和关联容器,才能查看更新后效果,更新命令请看 README.md 里的日常使用说明
windows wsl2 是放在 C 盘,会导致空间不足
关闭容器,退出 Docker 桌面版
1 | # 查看 wsl 中的镜像 |
重启 Docker 桌面版即可
docker mysql 远程账户添加
1 | mysql -u root -p |
iconv 无法正常使用
php alpine libiconv 中文编码错误
gnu-libiconv 1.16-r0 不存在 preloadable_libiconv.so 文件
Alpine 3.13 使用 iconv
最终解决方法:
使用 aplpine-3.13 版本并安装 1.15-r3 的 gnu-libiconv
1 | RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ gnu-libiconv=1.15-r3 |