为什么我会收到此错误? __CODE__
我的docker-compose文件几乎与此相同:https://docs.docker.com/compose/wordpress/
version: '2'
services:
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_HOST: 3306
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume: ~/mariadb
Run Code Online (Sandbox Code Playgroud) 更新:我连接到minikubevm,我看到我的主机目录已安装,但那里没有文件.此外,当我在那里创建一个文件时,它不会在我的主机中.他们之间有任何联系
我尝试使用kubernetes安装主机目录以开发我的应用程序.
正如文档推荐的那样,我使用minikube在我的电脑上运行我的kubernetes集群.目标是使用docker和kubernetes创建开发环境以开发我的应用程序.我想挂载一个本地目录,以便我的docker从那里读取代码应用程序.但这不起作用.任何帮助都会非常感激.
我的测试应用程序(server.js):
var http = require('http');
var handleRequest = function(request, response) {
response.writeHead(200);
response.end("Hello World!");
}
var www = http.createServer(handleRequest);
www.listen(8080);
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile:
FROM node:latest
WORKDIR /code
ADD code/ /code
EXPOSE 8080
CMD server.js
Run Code Online (Sandbox Code Playgroud)
我的pod kubernetes配置:(pod-configuration.yaml)
apiVersion: v1
kind: Pod
metadata:
name: apiserver
spec:
containers:
- name: node
image: myusername/nodetest:v1
ports:
- containerPort: 8080
volumeMounts:
- name: api-server-code-files
mountPath: /code
volumes:
- name: api-server-code-files
hostPath:
path: /home/<myuser>/Projects/nodetest/api-server/code
Run Code Online (Sandbox Code Playgroud)
我的文件夹是:
/home/<myuser>/Projects/nodetest/
- pod-configuration.yaml
- api-server/
- Dockerfile
- code/
- server.js …Run Code Online (Sandbox Code Playgroud) docker google-cloud-platform kubernetes dockerfile docker-volume
我有一个docker-compose.yml配置.其中一个容器是Tomcat服务器,它.war在webapps目录中部署了一些默认文件.
我希望能够传递(覆盖)war由驻留在主机上的某些人部署的存档.我认为最好的方法是以某种方式切换/覆盖启动docker-compose:默认情况下,我想运行war容器内的webapp(文件),但我希望有可能从我的主机安装目录(用于如果需要,在开发/调试期间的例子.
目前,我在我的行中有以下行,docker-compose.yml如果我需要默认值,则会注释掉.
volumes:
# By default, there is the latest version of the application already present in the container
# If you want to provider the container with your own .war file, uncomment the following line
# - ./application/webapps:/usr/local/tomcat/webapps
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现这一目标?
我有一个 Docker 镜像a,它对一组给定的文件执行一些逻辑。在本地运行时,我开始a如下:
docker run -v /home/Bradson/data:/data a
Run Code Online (Sandbox Code Playgroud)
这完成了它的工作。
现在我想a在远程 Docker 守护进程上运行:
DOCKER_HOST=tcp://remote_host:2375 docker run -v /home/Bradson/data:/data a
Run Code Online (Sandbox Code Playgroud)
我现在收到/data不包含任何内容的错误,很可能是因为/home/Bradson/data远程主机上不存在。
我该如何处理?我应该首先scp /home/Bradson/data访问远程主机上的某个目录并在-v选项中引用该目录吗?是否有纯粹的 Docker 方法?
请注意,我希望/home/Bradson/data在运行时可用,而不是在a. 因此我使用了该-v选项。
我在三台机器上运行几个Docker容器,组成一个Swarm集群.
一些存储持久数据的容器(如DB,Redis等)使用数据卷.(我尽量避免使用bind-mount)
此类数据卷位于/ var/lib/docker/volumes /中,并为每个卷分配自定义名称而不是随机序列ID:
# ls /var/lib/docker/volumes/
redis-data postgres-data fluentd-data ...
Run Code Online (Sandbox Code Playgroud)
我想每天定期备份这些卷,例如每天,以便我可以在发生机器故障时进行恢复并在以后修复.
但是,我在google中找到的每个文档都说明了使用新Linux容器的方法,并且tar:
https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
Run Code Online (Sandbox Code Playgroud)
为什么?如果我只是归档/var/lib/docker/volumes/VOLUME目录并将其复制到其他机器有什么问题吗?例如,权限,uid,gid等?
$ tar -zcvf redis.tgz /var/lib/docker/volumes/redis-data
Run Code Online (Sandbox Code Playgroud)
PS
有一种情况是,备份使用tar可能会因归档期间数据的更改而导致数据不一致.例如,当DB仍在运行并且执行inserts或updates 时归档DB数据目录......但我认为这个问题以相同的方式应用于这两种方法.
我正在使用Docker Compose和卷
version: '2'
services:
php-apache:
env_file:
- dev_variables.env
image: reypm/php55-dev
build:
context: .
args:
- PUID=1000
- PGID=1000
expose:
- "80"
- "9001"
extra_hosts:
# IMPORTANT: Replace with your Docker Host IP (will be appended to /etc/hosts)
- "dockerhost:xxx.xxx.xxx.xxx"
volumes_from:
- volumes_source
volumes_source:
image: tianon/true
volumes:
- ../:/var/www
volumes_data:
image: tianon/true
volumes:
- ./data/sessions:/sessions
Run Code Online (Sandbox Code Playgroud)
我们来看看以下事实:
~/var/www/var/www我想与容器共享主机上的数据,但我甚至不知道docker-compose.yml上面的文件是正确的还是需要更改的内容才能实现我的需要.我知道如何docker run单独使用它,但没有Docker Compose的线索?
能帮助我做到这一点吗?
更新:玩这个
我已将此行添加到docker-compose.yml文件中:
volumes_from:
- …Run Code Online (Sandbox Code Playgroud) 我有一个包含一个管理器和另一个普通节点的swarm集群,当我创建一个swarm服务时,我正在创建mount类型,mount source和mount target.它在manger和node中创建具有相同名称的卷,并启动容器,我的服务已启动.
当我发布服务时,与服务一起创建的卷未被删除,这仍然很好.
我面临的问题是,当我删除具有相同端点的卷时,它只删除了swarm管理器中的卷,在创建服务时在节点中创建的卷仍然存在.
我希望管理器删除与swarm服务一起创建的所有卷.有办法吗?
我想将bind mount添加到docker文件,就像我在Dockefile中初始化一个卷一样.有什么办法吗?
我有一个用于网站的 docker compose 文件,在用于各种目的的一堆其他容器中,包括一个具有持久数据的 mysql 数据库。目前撰写文件指定了数据的相对路径,例如:
mysql: 图像:mysql:5.7 容器名称:sqldb 卷: - ./mysql_data/_data:/var/lib/mysql
和文件夹结构:
--mysql_data --static_content docker-compose.yml
这意味着在任何时候我都可以通过复制整个文件夹并运行 docker-compose up 将整个站点(包括持久化内容)移动到另一台服务器。
但是阅读有关 docker 卷的信息,这听起来像是首选方法(使用“docker run”似乎不支持相对绑定安装路径,但可以在 compose 中工作)所以我想知道是否需要将这种方法更改为使用卷?这种相对绑定方法是否存在本质上的错误?如果我确实切换到卷,在移动容器时是否必须手动移动卷(例如,此方法如何将仅数据卷从一台主机移植到另一台主机?)?
我使用docker-compose up了以下docker-compose.yml
version: '3.5'
services:
mysql-server:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root_pwd
volumes:
- ./var/lib/mysql:/var/lib/mysql:rw
Run Code Online (Sandbox Code Playgroud)
该目录./var/lib/mysql最初不存在。
跑完后docker-compose up..
ls -al ./var/lib/mysql命令显示所有带有user:group 999:999.
我找不到999在我的系统中调用的用户或组。
为什么 docker-compose选择使用不存在的 uid:gid创建文件?
就我而言,除非我更改所有权,否则我无法提交特定目录。但即使我这样做,在下一次运行时,也会docker-compose up将所有权再次更新为999:999.
上述问题的解决方案是什么?例如,有没有办法指示 docker-compose 使用特定的 uid:gid 对映射主机中的文件?
主机:ubuntu-18.04
docker-compose:1.22.0
docker-volume ×10
docker ×9
backup ×1
containers ×1
docker-swarm ×1
dockerfile ×1
kubernetes ×1
wordpress ×1