Docker启动后再挂载目录

Docker启动后再挂载目录

以MySQL容器为示例

1.需要关闭Docker服务

systemctl stop docker

2.准备挂载目录

# 创建挂载目录,自定义
mkdir /usr/local/mysql_config

# 创建MySQL的配置文件,这里也可以直接挂载目录,看自己需求
touch /usr/local/mysql_config/my.cnf

3.进入宿主机的容器目录

# 宿主机的容器路径
cd /var/lib/docker/containers/

# 查看当前容器目录
ls
## 我这里有五个容器
[root@localhost containers]# ls
121f35fb4abf7a424cb2413af9dd43698c9cef475ef873586121296b7409270d  2031dad679823430394425a53946cc6809b021f2f0854b512490d469faac1028  a077ae243bfac33f62bc5135e414121510b4f0860c00c64d22afdb83051e3d60
199491b3be9a0d3ca31ed88f403cda6d8d345ab8a056b618ad850729cff2e216  97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845

# 查看Docker启动的容器
docker images
## 可以看到五个容器,注意CONTAINER ID,对比上面的容器目录,可以看到CONTAINER ID跟上面目录的前一段是相同的,所以相同的一段就是改容器的目录
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                                                                              NAMES
121f35fb4abf        5c62e459e087        "docker-entrypoint..."   58 minutes ago      Exited (0) 5 minutes ago                                                                                                      mysql_1
97cc3f4e08fd        5c62e459e087        "docker-entrypoint..."   About an hour ago   Up 10 seconds              33060/tcp, 0.0.0.0:3307->3306/tcp                                                                  mysql_test
199491b3be9a        4fc5fe6c8c09        "docker-entrypoint..."   5 weeks ago         Exited (255) 4 weeks ago   4369/tcp, 0.0.0.0:5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   rabbit
2031dad67982        49c664c4f907        "/sbin/tini -- /us..."   2 months ago        Exited (255) 5 weeks ago   50000/tcp, 0.0.0.0:10240->8080/tcp                                                                 jenkins
a077ae243bfa        5c62e459e087        "docker-entrypoint..."   2 months ago        Exited (255) 9 days ago    0.0.0.0:3306->3306/tcp, 33060/tcp                                                                  mysql
                                                               mysql
# 这里我是mysql_test容器,所以进入的是CONTAINER ID=97cc3f4e08fd的容器目录
cd 97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845

4.修改容器目录下的配置文件

# 查看容器目录下的文件 ls,主要修改的是hostconfig.json、config.v2.json文件
checkpoints  config.v2.json  hostconfig.json  hostname  hosts  resolv.conf  resolv.conf.hash  secrets  shm

(1).编辑 vi hostconfig.json

{"Binds":["/usr/local/mysql_config/my.cnf:/etc/mysql/conf.d/mysql.cnf"],"ContainerIDFile":"","LogConfig":{"Type":"journald","Config":{}},"NetworkMode":"default","PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3307"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"docker-runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0}


# 注意:主要修改Binds,这里我已经添加了宿主机/usr/local/mysql_config/my.cnf,挂载到容器里的/etc/mysql/conf.d/mysql.cnf

(2).编辑vi config.v2.json

{"StreamConfig":{},"State":{"Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"RemovalInProgress":false,"Dead":false,"Pid":8371,"ExitCode":0,"Error":"","StartedAt":"2021-12-06T02:32:25.933774901Z","FinishedAt":"2021-12-06T02:31:52.626517025Z","Health":null},"ID":"97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845","Created":"2021-12-06T01:10:21.46030513Z","Managed":false,"Path":"docker-entrypoint.sh","Args":["mysqld"],"Config":{"Hostname":"97cc3f4e08fd","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"3306/tcp":{},"33060/tcp":{}},"Tty":true,"OpenStdin":true,"StdinOnce":false,"Env":["MYSQL_ROOT_PASSWORD=123456","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.12","MYSQL_MAJOR=8.0","MYSQL_VERSION=8.0.25-1debian10"],"Cmd":["mysqld"],"Image":"5c62e459e087","Volumes":{"/var/lib/mysql":{}},"WorkingDir":"","Entrypoint":["docker-entrypoint.sh"],"OnBuild":null,"Labels":{}},"Image":"sha256:5c62e459e087e3bd3d963092b58e50ae2af881076b43c29e38e2b5db253e0287","NetworkSettings":{"Bridge":"","SandboxID":"c62ac687dd649755ce204943b5fd36a41f9a50a9341468964c3b441a8decb34a","HairpinMode":false,"LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"c630c2e2f21205d13e4a919634f714ed09ac57764e3b8cc4fbead8711cfd66a3","EndpointID":"db6e5134f3f4449e3683a1d5b39ba3fd5a7e1c8679984a98f112781afbe309aa","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","IPAMOperational":false}},"Service":null,"Ports":{"3306/tcp":[{"HostIp":"0.0.0.0","HostPort":"3307"}],"33060/tcp":null},"SandboxKey":"/var/run/docker/netns/c62ac687dd64","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null,"IsAnonymousEndpoint":false,"HasSwarmEndpoint":false},"LogPath":"","Name":"/mysql_test","Driver":"overlay2","MountLabel":"system_u:object_r:svirt_sandbox_file_t:s0:c570,c746","ProcessLabel":"system_u:system_r:svirt_lxc_net_t:s0:c570,c746","RestartCount":0,"HasBeenStartedBefore":true,"HasBeenManuallyStopped":false,"MountPoints":{
    # 这里开始
    "/etc/mysql/conf.d/mysql.cnf":{"Source":"/usr/local/mysql_config/my.cnf","Destination":"/etc/mysql/conf.d/mysql.cnf","RW":true,"Name":"","Driver":"","Type":"bind","Spec":{"Type":"bind","Source":"/usr/local/mysql_config/my.cnf","Target":"/etc/mysql/conf.d/mysql.cnf"},"SkipMountpointCreation":false}
# 这里结束
,"/var/lib/mysql":{"Source":"","Destination":"/var/lib/mysql","RW":true,"Name":"a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a","Driver":"local","Type":"volume","ID":"6b7903d1aeab2d3b418e6f0993bd8324cfa671582a9dc70fad4f0d7af3fae070","Spec":{},"SkipMountpointCreation":false}},"SecretReferences":null,"AppArmorProfile":"","HostnamePath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/hostname","HostsPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/hosts","ShmPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/shm","ResolvConfPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/resolv.conf","SeccompProfile":"","NoNewPrivileges":false}

# 注意:这里主要修改MountPoint里的配置,这里我已经添加了/usr/local/mysql_config/my.cnf,参考示例去配置

5.启动Docker服务和容器

# 启动Docker
systemctl start docker

# 启动容器
docker start mysql_test

# 查看挂载目录是否改变
docker inspect mysql_test
## 挂载信息
        "Mounts": [
            {
                "Type": "volume",
                "Name": "a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a",
                "Source": "/var/lib/docker/volumes/a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            ## 已改变
            {
                "Type": "bind",
                "Source": "/usr/local/mysql_config/my.cnf",
                "Destination": "/etc/mysql/conf.d/mysql.cnf",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您可以使用Docker来创建一个运行Python的容器,并挂载本地目录以便进行文件操作。以下是一些基本步骤: 1. 首先,确保您已经安装了Docker并且可以正常运行。 2. 创建一个新的目录,用于存放您的Python代码和任何其他需要挂载的文件。假设您创建了一个名为`my-python-app`的目录。 3. 在`my-python-app`目录中,创建一个名为`app.py`的Python文件,并将您的代码放入其中。 4. 创建一个名为`Dockerfile`的文件,并在其中定义容器的配置。以下是一个示例的Dockerfile内容: ```dockerfile # 使用Python作为基础镜像 FROM python:3.9 # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器的 /app 目录下 COPY . /app # 安装Python依赖 RUN pip install -r requirements.txt # 运行Python应用 CMD [ "python", "./app.py" ] ``` 5. 在`my-python-app`目录中创建一个名为`requirements.txt`的文件,并列出您的Python依赖项(如果有)。例如: ``` numpy pandas ``` 6. 打开终端或命令提示符,并导航到`my-python-app`目录。 7. 构建Docker镜像。运行以下命令: ``` docker build -t my-python-app . ``` 这将使用Dockerfile中的配置来构建一个名为`my-python-app`的镜像。 8. 运行容器挂载本地目录。运行以下命令: ``` docker run -v /本地目录的绝对路径:/app my-python-app ``` 请将`/本地目录的绝对路径`替换为您实际的本地目录路径。这将启动一个新的容器,并将您的本地目录挂载容器的`/app`目录下。 现在,您的Python应用程序将在Docker容器中运行,并且可以访问您挂载的本地目录中的文件。对于任何文件操作,例如读取或写入文件,您可以在Python代码中使用相对于挂载目录的路径来引用文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值