Docker常用命令(以Anaconda为例搭建环境)

10 篇文章 0 订阅
10 篇文章 0 订阅

Docker常用命令(以Anaconda为例搭建环境)

参考

安装顺序整理:

打包顺序整理

注意点:

  • 如果是flask项目, 建议将代码上传到docker容器中,在容器中运行代码并调试。原因是pycharm使用docker镜像开发flask项目时,虽然能运行起来,但是页面不能正常访问
  • docker会默认为容器分配172.17.0.2的ip地址,因此无需将代码提交到容器中,直接利用pycharm + docker运行,使用ip:5000即可访问,但是要注意main方法中host = 0.0.0.0 [0.0.0.0和127.0.0.1的区别 - 127.0.0.1对外不可见](#9)docker 部署flask项目解决访问不通的问题)

1、ubuntu安装docker

参考Ubuntu Docker 安装

1)自动安装

使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh
2)手动安装

注意点写在前面:

  • 如果安装过程中有报错,要及时解决,否则docker启动时就会报错
  • 安装docker之前,一定要把旧版本的docker删除干净

参考[在Ubuntu中安装Docker和docker的使用](https://www.cnblogs.com/blog-rui/p/11244023.html)

更新ubuntu的apt源索引

sudo apt-get update

安装包允许apt通过HTTPS使用仓库

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

添加Docker官方GPG key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置Docker稳定版仓库

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

添加仓库后,更新apt源索引

sudo apt-get update

安装最新版Docker CE(社区版)

sudo apt-get install docker-ce

检查Docker CE是否安装正确(!!!)

sudo docker run hello-world

出现如下信息,表示安装成功

在这里插入图片描述

这一步开始(如果磁盘空间紧缺的话),可以考虑给镜像,容器搬家,即 修改docker镜像的默认存储位置

3)卸载docker

参考ubuntu 完全干净的卸载docker

1.删除某软件,及其安装时自动安装的所有包

sudo apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc

2.删除docker其他没有没有卸载

dpkg -l | grep docker

接着删除无用的相关的配置文件

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 

3.卸载没有删除的docker相关插件(结合自己电脑的实际情况)

sudo apt-get autoremove docker-ce-*

4.删除docker的相关配置&目录

sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /var/lib/docker

5.确定docker卸载完毕(!!!)

whereis docker #如果还有docker文件一定要手动删除(“/etc/docker/”)
# 否则会报Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
4)使用 Shell 脚本进行安装

Docker 在 get.docker.com test.docker.com 上提供了方便脚本,用于将快速安装 Docker Engine-Community 的边缘版本和测试版本。脚本的源代码在 docker-install 仓库中。 不建议在生产环境中使用这些脚本,在使用它们之前,您应该了解潜在的风险:

  • 脚本需要运行 root 或具有 sudo 特权。因此,在运行脚本之前,应仔细检查和审核脚本。
  • 这些脚本尝试检测 Linux 发行版和版本,并为您配置软件包管理系统。此外,脚本不允许您自定义任何安装参数。从 Docker 的角度或您自己组织的准则和标准的角度来看,这可能导致不支持的配置。
  • 这些脚本将安装软件包管理器的所有依赖项和建议,而无需进行确认。这可能会安装大量软件包,具体取决于主机的当前配置。
  • 该脚本未提供用于指定要安装哪个版本的 Docker 的选项,而是安装了在 edge 通道中发布的最新版本nvidia。
  • 如果已使用其他机制将 Docker 安装在主机上,请不要使用便捷脚本。

本示例使用 get.docker.com 上的脚本在 Linux 上安装最新版本的Docker Engine-Community。要安装最新的测试版本,请改用 test.docker.com。在下面的每个命令,取代每次出现 get 用 test。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

如果要使用 Docker 作为非 root 用户,则应考虑使用类似以下方式将用户添加到 docker 组

$ sudo usermod -aG docker your-user

2、启动anaconda容器并安装jupyter

参考基于Docker搭建Anaconda环境

1)实例化anaconda容器

安装好docker并确认服务启动后,直接运行如下命令就可以基于官方的anaconda3镜像实例化一个本地容器:

docker run -it --name="anaconda" -p 8888:8888 continuumio/anaconda3 /bin/bash

参数-it是启用交互式终端,--name="anaconda"是给容器起名字(只要你记得住,可以换成别的名字),-p 8888:8888是将容器的8888端口映射到本地的8888端口,便于访问jupyter。

docker会自动从docker hub下载最新的anaconda3镜像并创建容器,之后你就进入容器中了。

2)安装/启动jupyter

在容器中,运行如下命令安装jupyter笔记本

conda install -c conda-forge jupyterlab

启动jupyter lab:

cd ~
jupyter lab --ip='*' --port=8888 --no-browser --allow-root

然后你应该能看到类似

[I 13:37:11.236 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 13:37:11.239 LabApp] 
    
    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-30-open.html
    Or copy and paste one of these URLs:
        http://10f788d1f6a3:8888/?token=***********
     or http://127.0.0.1:8888/?token=**********

的输出,把那个链接复制到浏览器打开,就能看到熟悉的jupyter lab界面了。

在这里插入图片描述

3)退出/重启/删除anaconda容器
a)退出

首先按Control+C退出jupyter笔记本,然后运行命令

exit
b)重启

下次再使用这个容器,不需要再从头配置了,就像虚拟机一样,直接开机就好。

docker start anaconda
docker exec -it anaconda /bin/bash

第一行是运行容器anaconda(这是之前用–name参数起的名字,还记得不?),第二行是在容器anaconda中运行交互式终端(你也可以在容器启动后单独使用第二行命令创建更多的终端连接到容器,比如在不退出jupyter的情况下用pip安装某个模块)

c)删除

请确保你容器中没有重要数据了,否则请使用docker cp命令将它拷贝出来,用法类似普通的cp命令。

# 反过来也可以把本地文件拷贝到容器中
docker cp anaconda:你容器中数据的路径 你的本地路径

使用docker rm命令删除容器。

docker rm anaconda
#docker rm 3412eb11668b

如果还想删除下载的镜像,可以使用docker image rm命令。首先列出所有镜像,看一下image id。

docker image ls                                                          
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
continuumio/anaconda3   latest              bdb4a7e92a49        8 weeks ago         2.7GB

然后

docker image rm bdb4a7e92a49
d)挂载

每次用完都要用docker cp拷贝文件太麻烦?可以在创建容器的时候指定文件系统映射。

docker run -it --name="anaconda_2" -p 8888:8888 -v `pwd`:/root continuumio/anaconda3 /bin/bash

参数-v当前目录pwd挂载到容器的/root目录,容器中对/root所做的改动会同步到主机。注意pwd两侧有反引号,表示此处使用命令pwd的输出 ,也可以指定本地的其它目录。不过,可能要注意一下本地目录的权限问题,以及在windows电脑上可能会有一些文件系统的冲突(比如不支持软连接啦等等,我也没试过,我的主力机是mac)。

4)pycharm使用docker环境

参考

CONTAINER ID   IMAGE                   COMMAND       CREATED              STATUS          PORTS                                       NAMES
5def5cb613ae   d7a36f06a282            "/bin/true"   About a minute ago   Created                                                     romantic_yalow
b394d6d4675f   d354850e2cac            "/bin/sh"     55 minutes ago       Created                                                     pycharm_helpers_PY-212.5284.44
2b1ad7022d19   continuumio/anaconda3   "/bin/bash"   2 hours ago          Up 36 minutes   0.0.0.0:8888->8888/tcp, :::8888->8888/tcp   anaconda
5)启动与停止docker

安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令

# 启动docker
sudo service docker start
#或者
sudo systemctl start docker

# 停止docker
sudo service docker stop
sudo systemctl stop docker

# 重启docker
sudo service docker restart
sudo systemctl restart docker
6)ubuntu向docker容器内复制文件

参考Docker和Ubuntu主机互传复制文件

# 进入docker获取当前目录的路径
# pwd
# 将容器b7200c1b6150的文件test.json传到主机/tmp/,在Ubuntu命令行中输入
$ docker cp b7200c1b6150:/opt/gopath/src/github.com/hyperledger/fabric/test.json /tmp/

# 将主机/tmp/test2.txt传到容器b7200c1b6150的根目录下,在Ubuntu命令行中输入
$ docker cp /tmp/test2.txt b7200c1b6150:/opt/gopath/src/github.com/hyperledger/fabric/
# mine
$ docker cp /home/wangxiaoxi/Desktop/requirements.txt 9cf7b3c196f3:/home/ 
7)docker将镜像打成压缩包并加载(“save”)

参考Ubuntu 16.04 LTS Docker改变image存放位置

# docker save -o 文件名.tar 镜像名
docker save -o /media/wangxiaoxi/新加卷/docker_dir/docker/test.tar hello-world
#恢复镜像
docker load -i [docker备份文件.tar]
8)docker将容器制作成镜像(“commit")
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

#OPTIONS说明:
#    -a :提交的镜像作者;
#    -c :使用Dockerfile指令来创建镜像;
#    -m :提交时的说明文字;
#    -p :在commit时,将容器暂停。
    
docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1

#mine
docker commit -a "wangxiaoxi" -m "fallDetection_toolkit_env" 2b1ad7022d19  fall_detection_env:v1

docker image ls
---
REPOSITORY              TAG              IMAGE ID       CREATED          SIZE
fall_detection_env      v1               6faba6757130   8 seconds ago    7.56GB
pycharm_helpers         PY-212.5284.44   d354850e2cac   14 minutes ago   44.8MB
busybox                 latest           16ea53ea7c65   2 weeks ago      1.24MB
continuumio/anaconda3   latest           f78cb37fb1bd   3 weeks ago      2.81GB
9)使用Dockerfile快速创建自定义的镜像

参考

常用指令:

FROM:基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER:镜像维护者的姓名和邮箱地址

RUN:容器构建时需要运行的命令

EXPOSE:当前容器对外暴露出的端口

WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

ENV:用来在构建镜像过程中设置环境变量

ADD:将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包

COPY:类似 ADD,拷贝文件和目录到镜像中。(COPY src dest 或 COPY [“src”,“dest”])

VOLUME:容器数据卷,用于数据保存和持久化工作

CMD:指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

ENTRYPOINT:指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数

ONBUILD:当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发

在这里插入图片描述

举个栗子:

# This my first nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos

#MAINTAINER 维护者信息
MAINTAINER tianfeiyu 

#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /etc/nginx.conf

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令
CMD ["nginx"]

执行dockerfile脚本(参考DockerFile 简单使用

# . 表示当前路径(一定不要在最后忘了'.',否则会报"docker build" requires exactly 1 argument.)
docker build -f mydockerfile -t mycentos:0.1 .  #-f表示dockerfile路径 -t表示镜像标签 
10)docker容器关闭防火墙

在运行flask项目时,python环境已经正常配置,但是在运行项目时会出现**http://127.0.0.1:5000无法访问的问题**。我怀疑是docker容器开启了防火墙。

参考iptables: unrecognized service

但是后来发现不是防火墙的问题,127.0.0.1修改成0.0.0.0,再用docker容器的ip地址访问即可

11)docker查询容器ip 和 ip分配问题
docker inspect 2b1ad7022d19 | grep Address
---
"LinkLocalIPv6Address": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "IPAddress": "172.17.0.2",
            "MacAddress": "02:42:ac:11:00:02",
                    "IPAddress": "172.17.0.2",
                    "GlobalIPv6Address": "",
                    "MacAddress": "02:42:ac:11:00:02",

docker默认为容器分配172.17.0.2的ip地址。

3、修改docker的默认存储位置

1)修改docker image位置(实际上就修改了docker的默认存储位置)

参考

  • Ubuntu 16.04 LTS Docker改变image存放位置

    Docker save 命令:

    docker save [OPTIONS] IMAGE [IMAGE...]
    
    docker save -o /media/wangxiaoxi/D/docker_dir/docker/test.tar hello-world  #将“D/docker_dir/docker/” 挂载到”/media/wangxiaoxi“下
    

    ubuntu上存放docker的位置在/val/lib/docker,这个根目录通常分配的空间较小。想扩充容量的方式很多,这里提供一种较为简陋的解决方案。

    备份已有镜像

    # docker save -o 文件名.tar 镜像名
    docker save -o /media/wangxiaoxi/新加卷/docker_dir/docker/test.tar hello-world
    

    指定新位置

    mkdir /etc/systemd/system/docker.service.d
    touch /etc/systemd/system/docker.service.d/docker-overlay.conf #文件名应该可以随便取
    vim /etc/systemd/system/docker.service.d/docker-overlay.conf
    
    #如果是ubuntu desktop,其实2句话即可
    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo gedit /etc/systemd/system/docker.service.d/docker-overlay.conf
    

    docker-overlay.conf内容 #替换**”/home/docker”为自己建的新目录(!!!!!!**)

    这里要注意:在修改docker的默认存储位置时,并不是所有的存储位置都可以,比如*在*'/home/docker’下就没问题,可以成功修改docker的默认存储位置,但是在*'/media/wangxiaoxi/新加卷/docker_dir/docker"或者“/media/wangxiaoxi/C/docker_dir/docker"*就会报错

    Job for docker.service failed because the control process exited with error code.
    See "systemctl status docker.service" and "journalctl -xe" for details.
    

    主要原因是linux的文件系统是ext2,ext3,而新存储位置的文件系统是Windows的ntfs系统。(df -T查询分区磁盘格式)

    文件系统       类型       1K-块     已用     可用 已用% 挂载点
    tmpfs          tmpfs    1621364     2120  1619244    1% /run
    /dev/sdc7      ext4    61053772 53924116  3998520   94% /
    tmpfs          tmpfs    8106816   214224  7892592    3% /dev/shm
    tmpfs          tmpfs       5120        4     5116    1% /run/lock
    tmpfs          tmpfs       4096        0     4096    0% /sys/fs/cgroup
    /dev/sdc5      vfat      973952     8036   965916    1% /boot/efi
    tmpfs          tmpfs    1621360      924  1620436    1% /run/user/1000
    /dev/sdc2      fuseblk 27409776 23132604  4277172   85% /media/wangxiaoxi/新加卷2
    /dev/sdc3      fuseblk 61439996 46701500 14738496   77% /media/wangxiaoxi/新加卷3
    /dev/sdb1      vfat    15542936   897512 14645424    6% /media/wangxiaoxi/3568-20B8
    /dev/sdc4      fuseblk 70457340 24718220 45739120   36% /media/wangxiaoxi/C
    

    解决办法:在windows上安装miniool_partition_wizard,将ntfs分区格式化为ext即可

    文件系统       类型       1K-块     已用     可用 已用% 挂载点
    tmpfs          tmpfs    1621364     2132  1619232    1% /run
    /dev/sdb5      ext4    61053772 53934400  3988236   94% /
    tmpfs          tmpfs    8106816    26156  8080660    1% /dev/shm
    tmpfs          tmpfs       5120        4     5116    1% /run/lock
    tmpfs          tmpfs       4096        0     4096    0% /sys/fs/cgroup
    /dev/sdb3      vfat      973952     8036   965916    1% /boot/efi
    tmpfs          tmpfs    1621360      148  1621212    1% /run/user/1000
    /dev/sdb8      ext4    36525840    44154 34524260    1% /media/wangxiaoxi/D
    /dev/sdb2      fuseblk 27409776 23132604  4277172   85% /media/wangxiaoxi/新加卷2
    /dev/sdb7      fuseblk 31472636 24720820  6751816   79% /media/wangxiaoxi/C1
    /dev/sdb6      fuseblk 61439996 46701500 14738496   77% /media/wangxiaoxi/新加卷
    /dev/sdc1      vfat    15542936   897512 14645424    6% /media/wangxiaoxi/3568-20B8
    
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd --graph="/media/wangxiaoxi/新加卷/docker_dir/docker" --storage-driver=overlay
    

    重启docker(一定要检查要更改的存储路径上有没有docker文件夹,如果有,及时删除

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    恢复刚刚备份的镜像

    docker load -i [docker备份文件.tar]
    

    “移动”完成,之前/var/lib/docker就可以删掉了,当然空间有的多可以保留以防万一

    sudo rm -r /var/lib/docker
    

    删除后,docker镜像转移到了home/docker目录,可以下更多镜像啦(ps:容量还是不够用,能接个大容量机械硬盘就好了)

查看docker的存储位置(要检查挂载的路径和docker-overlay.conf配置里的路径是否一一对应,否则会识别不料挂载盘下的image(!!!)

docker info |grep 'Docker Root Dir'
2)修改docker container位置

参考如何修改docker容器存储位置

3)查询文件夹大小
du -h --max-depth=0

4、常见问题

1)Got permission denied报错

参考启动Docker“Got permission denied while trying to connect to the Docker daemon socket“问题

在终端执行"docker version"命令,出现如下报错:

”Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied“

解决方法:

sudo groupadd docker          #添加docker用户组
sudo gpasswd -a $XXX docker   #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,liangll
sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组
2)“systemctl status docker.service” and “journalctl -xe” for details
$ sudo systemctl restart docker
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

$systemctl status docker.service
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
    Drop-In: /etc/systemd/system/docker.service.d
             └─docker-overlay.conf
     Active: failed (Result: exit-code) since Wed 2021-09-29 21:03:01 CST; 6s a>
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 9785 ExecStart=/usr/bin/dockerd --graph=/media/wangxiaoxi/新加卷/d>
   Main PID: 9785 (code=exited, status=1/FAILURE)

929 21:03:01 wangxiaoxi-virtual-machine systemd[1]: docker.service: Schedule>
929 21:03:01 wangxiaoxi-virtual-machine systemd[1]: Stopped Docker Applicati>
929 21:03:01 wangxiaoxi-virtual-machine systemd[1]: docker.service: Start re>
929 21:03:01 wangxiaoxi-virtual-machine systemd[1]: docker.service: Failed w>
929 21:03:01 wangxiaoxi-virtual-machine systemd[1]: Failed to start Docker A>
lines 1-15/15 (END)

etc/docker/daemon.json配置镜像源

{
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
3)gcc-10-base文件解析失败

安装anaconda镜像报错,参考第4)问,主要原因是docker一开始就安装报错了

4)没有Release文件

参考仓库 “http://ppa.launchpad.net/bladerf/bladerf/ubuntu focal Release” 没有 Release 文件

5)xxx软件包 post-installation 脚本 子进程返回错误状态 1(“还是解决不了问题”)

已安装 docker-ce 软件包 post-installation 脚本 子进程返回错误状态 1

参考子进程 已安装 post-installation 脚本 返回错误状态 1 解决办法(示例代码)

dpkg 是Debian package的简写,为”Debian“ 操作系统专门开发的套件管理系统,用于软件的安装,更新和移除

$ sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old //现将info文件夹更名
$ sudo mkdir /var/lib/dpkg/info //再新建一个新的info文件夹
$ sudo apt-get update
$ sudo apt-get -f install
$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old //执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_old文件夹下
$ sudo rm -rf /var/lib/dpkg/info //把自己新建的info文件夹删掉
$ sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info //把以前的info文件夹重新改回名字
6)docker-ce安装报错(“还是解决不了问题”)
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.
...
在处理时有错误发生:docker-ce
E: Sub-process /usr/bin/dpkg returned an error code (1)

参考E: Sub-process /usr/bin/dpkg returned an error code (1)解决办法

7)容器内使用sudo 报bash: sudo: command not found

参考容器内使用sudo 报bash: sudo: command not found

apt-get update
apt-get install sudo
8)容器内报错:libGL.so.1: cannot open shared object file

参考ImportError: libGL.so.1: cannot open shared object file: No such file or directory——docker容器内问题报错

sudo agt-get update
sudo apt install libgl1-mesa-glx
9)docker 部署flask项目解决访问不通的问题

参考

先修改runApp.py的端口:

if __name__ == '__main__':
    #app.run(debug=True,threaded=True,host='127.0.0.1')
    app.run(debug=True,threaded=True,host='0.0.0.0')   #docker对外提供的ip:0.0.0.0 

0.0.0.0 和127.0.0.1的区别

0.0.0.0 集合 不清楚 主机 目的 网络 收容所

127.0.0.1 本机地址 Localhost

  • a、0.0.0.0:它表示的是这样一个集合:所有不清楚的主机和目的网络。
  • b、255.255.255.255:限制广播地址,这个地址不能被路由器转发
  • c、127.0.0.1:本机地址,在Windows系统中,这个地址有一个别名“Localhost”。

0.0.0.0

严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由

255.255.255.255

限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。

127.0.0.1

本机地址,主要用于测试。用汉语表示,就是“我自己”。在Windows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。

将flask项目打包上传到容器中,启动flask服务

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with inotify reloader
/opt/conda/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:838: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
/opt/conda/lib/python3.8/site-packages/nilearn/datasets/__init__.py:93: FutureWarning: Fetchers from the nilearn.datasets module will be updated in version 0.9 to return python strings instead of bytes and Pandas dataframes instead of Numpy arrays.
  warn("Fetchers from the nilearn.datasets module will be "
 * Debugger is active!
 * Debugger PIN: 232-424-275

查看容器ip地址,检查是否ping通

docker inspect 2b1ad7022d19 | grep Address
#"IPAddress": "172.17.0.2",

在主机浏览器上输入127.17.0.2:5000,即可访问页面。

5、常见linux命令

#强行删除文件夹
sudo rm -rf dir/
#systemctl理解: systemctl会去/etc/init.d目录下,查看,执行相关程序 <https://blog.csdn.net/skh2015java/article/details/94012643>
systemctl start redis 
systemctl start docker 
systemctl stop redis 
systemctl stop docker 
#ubuntu之修改硬盘名称
sudo fdisk -l #1.查看当前所有分区

df -T #2.查看所有分区磁盘格式

sudo umount /dev/sdb1       # 3.卸载要修改名称的分区, 其中 sdb1为需要修改的硬盘
 
sudo ntfslabel /dev/sdb1 newname #4.修改名称(适用于NTFS)  
#eg: sudo ntfslabel /dev/sdc4 C
 
sudo e2label /dev/sdb1 newname  #4.修改名称((适用于ext2或ext3))
#Ubuntu命令行模式下挂载与卸载U盘  [移动硬盘临时,永久挂载](https://blog.csdn.net/weixin_39533280/article/details/111116646)
sudo mount -t vfat /dev/sdb1 usb  #将U盘的东西挂载在usb文件夹下了,可以进入文件夹,查看是否有东西
sudo umount ~/usb  #卸载U盘

#Note:为什么需要让移动硬盘挂载?是因为当你真想把这个移动硬盘当做内存来使用的时候,系统会提示你权限不够,当你加上sudo的时候,又提示你没有这个命令。因此此时你需要把这个移动硬盘挂载上。
#修改文件夹权限 https://www.cnblogs.com/viviwind/archive/2012/08/02/2619451.html
#常用方法如下:

sudo chmod 600 ××× (只有所有者有读和写的权限)
sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)
sudo chmod 666 ××× (每个人都有读和写的权限)
sudo chmod 777 ××× (每个人都有读和写以及执行的权限)

#其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld)。

#解释一下,其实整个命令的形式是
sudo chmod -(代表类型)×××(所有者)×××(组用户)×××(其他用户)

# 如000表示三项权限均无,而100表示只读。这样,我们就有了下面的对应:
# 0 [000] 无任何权限
# 4 [100] 只读权限
# 6 [110] 读写权限
# 7 [111] 读写执行权限
#修改文件所有者
#对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户
sudo chown -R username:users Document/
#username:users users用户组的username,用户组参数不是必须有
sudo chown -R wangxiaoxi wangxiaoxi/
#复制一个**文件夹(该文件下可以有文件夹)**到另一个文件夹下
sudo cp -r 文件名 目标文件夹路径  #(-r 就是递归的意思,删除时 也同样这么加-r)
#复制一个文件到另一个路径下
sudo cp 文件路径/文件名 目标文件夹路径
#查询文件夹大小
du -h --max-depth=0  #du -h 查看当前目录下所有目录以及子目录的大小:
du -h --max-depth=1

du -m /home/linux #以MB为单位显示一个目录树及其每个子树的磁盘使用情况

ubuntu安装gi包:

1)ubuntu 18.04 虚拟环境 安装gi包 建立usr/bin/gi和虚拟环境env/site_packages之间的软链接

2)Anaconda虚拟环境中使用playsound测试报错 cannot import name ‘_gi‘ from ‘gi‘ 下载pyGObject即可

3)pyGObject官网 ValueError: Namespace Gdk not available 官网

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值