尝试使用以下命令解压 docker 容器中的文件时:
tar -zvxf training.tar.gz -C data/multi30k
Run Code Online (Sandbox Code Playgroud)
我收到以下错误(train.de是 .tar 文件中的一个文件):
tar: train.de Cannot change ownership to uid 1000, gid 1000: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
但是文件在本地解压就好了。什么可能导致此错误?
我已经使用 Proxmox v4 设置了一个家庭服务器,并且想要运行一个 Docker 容器。我应该怎么做?我应该在 LXC 容器内设置 Docker 还是应该创建一个完整的 VM 并使用最小的操作系统之一,如 Atomic Host / CoreOS / RancherOS?
从这个问题的措辞中可以明显看出,我对容器和 Proxmox 都是新手,所以在回复时请记住这一点。这个家庭项目是我正在做的一件事来纠正这个问题。然而,我对 Linux 或虚拟化并不陌生。谢谢你的帮助!
我想为我的服务器做一些简单的日志记录,这是一个在 Docker 容器中运行的小型 Flask 应用程序。
这是 Dockerfile
# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv
# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz
# Run server
EXPOSE 80
CMD ["python", "index.py", "1>server.log", "2>server.log"]
Run Code Online (Sandbox Code Playgroud)
正如你在最后一行看到的,我将 stderr 和 stdout 重定向到一个文件。现在我运行这个容器和 shell
docker run -d -p 80:80 perfektimprezy
docker exec -it "... id of container ..." bash
Run Code Online (Sandbox Code Playgroud)
并注意以下事项:
服务器正在运行,网站正在运行
没有 /srv/server.log
ps aux | grep python 产量:
root 1 1.6 3.2 54172 16240 …Run Code Online (Sandbox Code Playgroud) 鉴于我们客户的限制,我们不能让我们的虚拟机完全对互联网开放。但是,我们有时需要从 Docker Hub 中拉取 Docker 镜像。
我们可以将 IP 地址和范围以及端口列入白名单;但没有主机名。
我找遍了所有我能找到的地方,但没有找到任何 Docker 在运行诸如docker pull redis. 有没有人遇到过这样的问题?
我检查了这个问题:Docker 无法提取图像,但不出所料,https : //index.docker.io解析为另一个 IP。
当我通过 Cisco AnyConnect 客户端初始化 VPN 连接时,我失去了与 docker 守护进程的连接。我的猜测(由一些谷歌搜索支持)是这与 AnyConnect 重写的路由有关。
问题是 - 如何规避?在建立 VPN 连接后,我尝试启动和重新启动 docker 守护进程,但这种幼稚的尝试显然失败了。
然后我在谷歌上搜索了一堆提议的相当笨拙的解决方案,例如,这个人建议转发端口,然后总是使用docker --tlsverify=false- 我不想这样做。
我尝试做的另一件事是使用这里提到的解决方案:
docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "25.0.1.100/24" default
Run Code Online (Sandbox Code Playgroud)
这对我也不起作用。
因此,我正在寻找对其他 docker 用户也有益的规范解决方案。
我的 docker 版本是1.11.2,操作系统是OS X El Capitan (10.11.6)。
我正在尝试将 json 日志从 docker 传输到jq. 如果我使用它,它工作正常:
docker logs container_id 2>&1 | jq '.'
Run Code Online (Sandbox Code Playgroud)
但是,如果我试图追踪它,它就会卡住。
docker logs -f container_id 2>&1 | jq '.'
Run Code Online (Sandbox Code Playgroud)
虽然尾随本身确实有效:
docker logs -f container_id 2>&1
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
我正在尝试运行一个 docker 镜像来安装 hubic(在线存储)并将其公开给主机
到目前为止的工作是容器正确安装熔断器(到/mnt/hubic)
运行 docker 时,我尝试使用映射的卷运行,因为/path/on/host:/mnt/hubic这似乎可以工作(即,如果目录不存在,则 docker 会创建该目录),但内容从未出现。如果我进入容器,我可以看到在线存储中的文件,但主机文件夹不包含任何内容
我是否缺少允许 docker 执行此操作的选项?
我用来启动容器的命令
docker run -v ~/.hubicfuse:/root/.hubicfuse -v /tmp/mounted:/mnt/hubic --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined -it {container_name}
我正在了解 docker-compose.yaml 的工作原理。我正在尝试在撰写文件中定义一个卷并将其挂载在本地的挂载点。我尝试运行一个基本的 .yaml 来挂载我的卷:
version: '3.2'
services:
mydb:
image: postgres
volumes:
- db-data:var/lib/postgres/data
ports:
- "5432:5432"
volumes:
- db-data:
- driver: local
Run Code Online (Sandbox Code Playgroud)
但是当我运行时docker-compose down,我收到一个错误:
$ docker-compose down
The Compose file '.\docker-compose.yml' is invalid because:
services.mydb.volumes 'type' is a required property
services.mydb.volumes 'type' is a required property
Run Code Online (Sandbox Code Playgroud)
我对此很陌生,并且仍然了解使用 Docker 的所有细微差别。我认为我的问题是缩进错误或我如何使用扩展名调用版本号,但我似乎无法理解错误。
免责声明:我不是在寻找配置 MySQL/MariaDB 以使用 TCP 连接的方法。我知道这个选项,问题不在于那个方面。
我无法将容器内的套接字文件绑定到主机文件系统。我希望像这样一个简单的 docker-compose 条目可以工作:
volumes:
- /srv/docker/sockets/mariadb.container.sock:/var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)
但这没有用。相反,我遇到了以下错误消息:
its_sql_dev | 190305 10:31:23 [ERROR] Can't start server : Bind on unix socket: Address already in use
its_sql_dev | 190305 10:31:23 [ERROR] Do you already have another mysqld server running on socket: /var/run/mysqld/mysqld.sock ?
Run Code Online (Sandbox Code Playgroud)
主机系统中文件的状态似乎无关紧要——它是否已经存在、存在a+rwx权限、存在于正确的用户或根本不存在似乎对容器是否启动没有任何影响。
也许最令人困惑的是主机文件系统中的最终结果:
[user@server mariadb]# ls -alsh /srv/docker/shared/
total 16K
4.0K drwxrwxrwx 4 root root 4.0K Mar 5 11:31 .
4.0K drwxr-xr-x 7 root root 4.0K Mar 1 13:09 ..
4.0K drwxr-xr-x 2 …Run Code Online (Sandbox Code Playgroud) 在 Linux 上,假设我有一个可执行文件。让我们看两种情况:
(A)可执行文件的很大一部分是磁盘 I/O;
(B)可执行文件不执行任何磁盘 I/O。
对于每种情况A和B,我是否应该期望这两种情况之间的可执行文件的运行时间存在显着差异?
(1)可执行文件和所有涉及的文件都在一个 tmpfs 文件夹(一个 RAM 文件夹)中;
(2)可执行文件和所有涉及的文件都在“常规”磁盘文件夹中。
我还对是否应该期待与 Docker 相关的这三个场景之间存在显着差异感兴趣:
(3)可执行文件从 Docker 容器内运行,并且该可执行文件和所有涉及的文件都在从内部创建的 tmpfs 文件夹中使用docker run -v ...
(4)挂载的磁盘驱动器下的容器可执行文件从 Docker 容器内运行,并且可执行文件和所有涉及的文件都位于从容器内创建的 tmpfs 文件夹中,位于“内部”驱动器(即容器停止后不会持续存在)。
(5)可执行文件从 Docker 容器内运行,并且可执行文件和所有涉及的文件都在“常规”磁盘文件夹中。
我的期望是,一般来说,从 tmpfs 文件夹运行应该更快,主要是在涉及大量磁盘 I/O 时。但我在实践中没有看到这一点,所以我想看看我的期望是否正确。