在虚拟机docker中安装ubuntu系统,运行ubuntu镜像生成一个容器,上传本地的压缩包到容器中报错问题
1.安装docker和依赖包(之前已经安装完成)
2.往docker中导入ubuntu镜像
[root@server1 ~]# ls
docker game2048.tar nginx.tar rhel7.tar ubuntu.tar
[root@server1 ~]# docker load -i ubuntu.tar
56abdd66ba31: Loading layer 196.8MB/196.8MB
9468150a390c: Loading layer 208.9kB/208.9kB
11083b444c90: Loading layer 4.608kB/4.608kB
5f70bf18a086: Loading layer 1.024kB/1.024kB
Loaded image: ubuntu:latest
3.查看docker中的镜像
[root@server1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
game2048 latest 19299002fdbe 2 years ago 55.5MB
ubuntu latest 07c86167cdc4 3 years ago 188MB
4.运行ubuntu
[root@server1 ~]# docker run -it --name vm2 ubuntu
5.docker中与物理机共用一个内核
root@665db1d5ab4a:/# uname -r
3.10.0-514.el7.x86_64
[root@server1 ~]# uname -r
3.10.0-514.el7.x86_64
6.查看docker中ubuntu系统的ip是:172.17.0.3
9.docker所在虚拟机server1有docker0。IP是:172.17.0.1
10.安装bridge-utils
[root@foundation8 ~]# which brctl
/usr/sbin/brctl
[root@foundation8 ~]# rpm -qf /sbin/brctl
bridge-utils-1.5-9.el7.x86_64
[root@server1 ~]# yum install -y bridge-utils-1.5-9.el7.x86_64
11.查看
[root@server1 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242f32e806c no vethb74fb69
vethc8b42c5
[root@server1 ~]# sysctl -a | grep ip_for
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
12.查看端口转发,数据只能从server1(docker)80端口进入,转发到172.17.0.2的80端口
[root@server1 ~]# iptables -t nat -nL
13.查看docker运行状态
[root@server1 ~]# docker ps
在上传压缩包到Docker容器时,需要注意以下问题:
pwd
查看当前位置。docker ps
查看当前正在运行的容器列表。docker exec -it <容器ID> bash
进入容器内部,再使用ls
或pwd
等命令查看目标位置。docker cp <本地文件路径> <容器ID>:<容器目标路径>
上传到容器内部。可能的错误有: 1. 本地文件路径错误或不存在。 2. 容器ID错误或不在运行状态。 3. 容器目标路径错误或不存在。
解决方案:
假设本地压缩包在/home/user/data.tar.gz
,容器ID为5f83b8d5e9d9
,上传至容器内的目标路径为/data
,则可以使用以下命令上传:
docker cp /home/user/data.tar.gz 5f83b8d5e9d9:/data/data.tar.gz
如果目录不存在,则需要先创建目录再上传:
docker exec -it 5f83b8d5e9d9 bash
mkdir /data # 如果需要创建/data目录
exit # 退出容器内部
docker cp /home/user/data.tar.gz 5f83b8d5e9d9:/data/data.tar.gz
这样就可以将本地的data.tar.gz
上传到容器内的/data
目录下了。
docker cp应该识别不了容器里面的用户根目录,你可以使用全路径试试
docker容器用全路径