我正在尝试将主机目录装载到Docker容器中,以便在主机上完成的任何更新都反映到Docker集装箱中。
我哪里做错了什么。以下是我所做的:
kishore$ cat Dockerfile
FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]
kishore$树.├── Dockerfile文件└── 主文件夹├── tfile1.text├── tfile2.txt文件├── tfile3.txt文件└── tfile4.txt文件
1个目录,5个文件基肖尔$pwd/用户/kishore/tdockkishore$docker build--tag=k3_s3:最新。
Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
---> 99ec81b80c55
Step 1 : RUN apt-get update
---> Using cache
---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
---> Using cache
---> aed48634e300
Step 3 : CMD ["/bin/bash"]
---> Running in d081b576878d
---> 65db8df48595
Step 4 : WORKDIR /test_container
---> Running in 5b8d2ccd719d
---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
---> Running in 72ca332d9809
---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809
kishore$docker运行-d-v/Users/kishore/main_folder:/test_container k3_s3:最新c9f9a7e09c54ee1c2c966f15c963b4af320b5203b8c46689033c1ab8872a0漏洞$docker运行-i-t k3_s3:最新/bin/bash
root@0f17e2313a46:/test_container# ls -al
total 8
drwx------ 2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..
root@0f17e2313a46:/test_container#退出exitkishore$docker-vDocker版本0.9.1,内部版本867b2a9
我不知道如何检查boot2docker版本
问题和面临的问题:
如何将main_folder链接到docker容器中的test_container文件夹?我需要自动完成。如何在不真正使用run-d-v命令的情况下做到这一点?如果boot2docker崩溃会发生什么?Docker文件存储在哪里(除了Dockerfile)?
使用命令行:
docker run -it --name <WHATEVER> -p <LOCAL_PORT>:<CONTAINER_PORT> -v <LOCAL_PATH>:<CONTAINER_PATH> -d <IMAGE>:<TAG>
使用docker-compose.yaml:
version: '2'
services:
cms:
image: <IMAGE>:<TAG>
ports:
- <LOCAL_PORT>:<CONTAINER_PORT>
volumes:
- <LOCAL_PATH>:<CONTAINER_PATH>
假设:
图片:k3_s3标签:最新本地端口:8080容器端口:8080LOCAL_PATH:/要装载的卷容器路径:/mnt
示例:
首先创建要装载的/卷。(如果存在,则跳过)
$ mkdir -p /volume-to-mount
docker compose-f docker-compose.yaml up-d
version: '2'
services:
cms:
image: ghost-cms:latest
ports:
- 8080:8080
volumes:
- /volume-to-mount:/mnt
验证容器:
docker exec -it CONTAINER_ID ls -la /mnt
从官方网站引用:
确保之前没有运行任何入门容器。从应用程序目录运行以下命令。
x86-64 Mac或Linux设备:码头运行-dp 3000:3000\-w/app-v“$(pwd):/app”\节点:12高山\sh-c“纱线安装和纱线运行开发”Windows(PowerShell):码头运行-dp 3000:3000`-w/app-v“$(pwd):/app”`节点:12高山`sh-c“纱线安装和纱线运行开发”Aple silicon Mac或其他ARM64设备:码头运行-dp 3000:3000\-w/app-v“$(pwd):/app”\节点:12高山\sh-c“apk add--无缓存python2g++make&&yarn install&&yarn run-dev”
解释:
dp 3000:3000-与之前相同。以分离(后台)模式运行并创建端口映射w/app-设置运行命令的“工作目录”或当前目录v“$(pwd):/app”-将当前目录从主机绑定到容器中的/app目录节点:12 alpine-要使用的图像。
注意,这是Dockerfile sh-c“yarn install&&yarn run dev”命令中应用程序的基本映像。
我们正在使用sh(alpine没有bash)启动一个shell,并运行yarn install来安装所有依赖项,然后运行yarn run dev。如果我们查看package.json,我们将看到dev脚本正在启动nodemon。
使用命令行:
docker run -it --name <WHATEVER> -p <LOCAL_PORT>:<CONTAINER_PORT> -v <LOCAL_PATH>:<CONTAINER_PATH> -d <IMAGE>:<TAG>
使用docker-compose.yaml:
version: '2'
services:
cms:
image: <IMAGE>:<TAG>
ports:
- <LOCAL_PORT>:<CONTAINER_PORT>
volumes:
- <LOCAL_PATH>:<CONTAINER_PATH>
假设:
图片:k3_s3标签:最新本地端口:8080容器端口:8080LOCAL_PATH:/要装载的卷容器路径:/mnt
示例:
首先创建要装载的/卷。(如果存在,则跳过)
$ mkdir -p /volume-to-mount
docker compose-f docker-compose.yaml up-d
version: '2'
services:
cms:
image: ghost-cms:latest
ports:
- 8080:8080
volumes:
- /volume-to-mount:/mnt
验证容器:
docker exec -it CONTAINER_ID ls -la /mnt
您也可以使用Portiner web应用程序来实现这一点,以获得不同的视觉体验。
首先拉动Portiner图像:
docker pull portainer/portainer
然后为Portiner创建一个卷:
docker volume create portainer_data
还要创建Portiner容器:
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
您将能够使用浏览器访问web应用程序,网址为:“http://localhost:9000“.第一次登录时,系统将提示您设置Portiner管理员凭据。
在web应用程序中,遵循以下菜单和按钮:(容器>添加容器>填充设置>部署容器)
我很难用Portiner创建“装载”卷,我意识到在创建容器卷时必须单击“绑定”。下面是一个卷绑定设置的示例,该设置适用于我的容器创建,其中装载的卷绑定到主机。
备注:我使用Docker 19.035和Portiner 1.23.1