docker并且docker-compose似乎与同一个dockerFile进行交互,两个工具之间有什么区别?
我docker-compose.yml在两个不同的文件夹中有两个单独的文件:
如何确保容器中的容器~/front/docker-compose.yml可以向容器发送请求~/api/docker-compose.yml?
我知道front可以使用api单个容器设置该选项,以便可以为此容器分配特定的IP地址,但似乎此选项在使用时不可用--default-gateway.
目前我最终做了一个docker run并查看输出中的网关.它有效,但问题是这个IP是随机归因的,所以我不能依赖它.
因此,这个问题的另一种形式可能是:
但最后我要照顾的是:
我试图将一个php应用程序停靠.在dockerfile中我下载了存档,提取它等.
一切正常,但是如果新版本发布,我更新dockerfile我必须重新安装应用程序,因为config.php被覆盖.
所以我认为我可以将文件挂载为卷,就像我对数据库一样.
我尝试了两种方式,包括音量和直接路径.
泊坞窗 - 撰写:
version: '2'
services:
app:
build: src
ports:
- "8080:80"
depends_on:
- mysql
volumes:
- app-conf:/var/www/html/upload
- app-conf:/var/www/html/config.php
environment:
DB_TYPE: mysql
DB_MANAGER: MysqlManager
mysql:
image: mysql:5.6
container_name: mysql
volumes:
- mysqldata:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
volumes:
mysqldata:
app-conf:
Run Code Online (Sandbox Code Playgroud)
这导致错误:
我用一个给定的路径尝试了它,作为一个装载的音量.
/src/docker/myapp/upload:/var/www/html/upload
/src/docker/myapp/upload:/var/www/html/config.php
Run Code Online (Sandbox Code Playgroud)
但是两种方式都不起作用.使用已安装的卷,我看到上传已创建.
但随后失败了
/var/www/html/config.php \\"导致\\"不是目录\\"\""
如果我用/src/docker/myapp/upload/config.php:/var/www/html/config.php试试
Docker创建上传文件夹,然后创建config.php文件夹.不是文件.
或者还有另一种方法来保持配置?
我希望能够在docker-compose.yml中使用env变量,并在docker-compose时传入值.这是一个例子.今天我正在使用基本的docker run命令执行此操作,该命令包含在我自己的脚本中.有没有办法用compose实现它,没有任何这样的bash包装器?
proxy:
hostname: $hostname
volumes:
- /mnt/data/logs/$hostname:/logs
- /mnt/data/$hostname:/data
Run Code Online (Sandbox Code Playgroud) 我正在使用docker-compose来创建我的开发环境.我想构建一个特定的图像,但我不知道如何为该图像设置名称.
wildfly:
build: /path/to/dir/Dockerfile
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
Run Code Online (Sandbox Code Playgroud)
当我执行docker-compose一切正常时,我得到一个新图像的随机名称.是否可以为构建映像设置名称?
我在我的机器上安装了Docker,我有Ubuntu操作系统.比我安装了docker,当我跑
sudo docker run hello-world
Run Code Online (Sandbox Code Playgroud)
一切都没问题,但是我想隐藏这个词sudo以使命令更加简短.
如果我没有单词写命令 sudo
docker run hello-world
Run Code Online (Sandbox Code Playgroud)
这显示如下:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.
Run Code Online (Sandbox Code Playgroud)
当我尝试制作时,情况也是如此
docker-compose up
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我的docker compose文件有三个容器,web,nginx和postgres.Postgres看起来像这样:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Run Code Online (Sandbox Code Playgroud)
我的目标是安装一个./database与postgres容器内调用的本地文件夹相对应的卷/var/lib/postgres.当我启动这些容器并将数据插入postgres时,我验证/var/lib/postgres/data/base/了我正在添加的数据(在postgres容器中),但是在我的本地系统中,./database只获取了一个data文件夹,即./database/data创建了它,但它是空的.为什么?
笔记:
根据尼克的建议,我做了一个docker inspect并发现:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
Run Code Online (Sandbox Code Playgroud)
这似乎是数据被另一个我自己编码的卷偷走了.不知道为什么会这样.postgres图像是否为我创建了该卷?如果是这样,当我重新启动时,是否有某种方法可以使用该卷而不是我正在安装的卷?否则,是否有一种很好的方法可以禁用其他卷并使用我自己的卷./database?
我找到了解决方案,感谢尼克!(和另一位朋友)以下答案.
我的docker镜像是在Jenkins CI服务器上构建的,并被推送到我们的私有Docker Registry.我的目标是使用docker-compose配置环境,它始终启动图像的最初构建状态.
我目前在不同的机器上使用docker-compose 1.3.2以及1.4.0,但我们之前也使用过旧版本.
我总是使用docker-compose pull && docker-compose up -d命令从注册表中获取新图像并启动它们.我相信我的首选行为在某个时间点按预期工作,但从那时起docker-compose up开始重新运行先前停止的容器,而不是每次都启动最初构建的映像.
有没有办法摆脱这种行为?这种方式可能是在docker-compose.yml配置文件中连接的,在每次调用时都不依赖于"忘记"命令行中的某些内容吗?
PS.除了找到实现目标的方法之外,我还想更多地了解这种行为的背景.我认为Docker的基本思想是构建一个不可变的基础架构.docker-compose的当前行为似乎与这种方法完全冲突..或者我在这里错过了一些观点?
我docker logs [container-name]用来查看特定容器的日志.
是否有一种优雅的方式来清除这些日志?
我有一个具有以下服务的应用程序:
web/ - 在端口5000上保存并运行python 3 flask Web服务器.使用sqlite3.worker/- 有一个index.js文件,它是队列的工作者.Web服务器使用json API over port与此队列交互9730.工人使用redis进行存储.工作人员还将数据本地存储在文件夹中worker/images/现在这个问题只涉及到了worker.
worker/DockerfileFROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
Run Code Online (Sandbox Code Playgroud)
docker-compose.ymlredis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
Run Code Online (Sandbox Code Playgroud)
当我运行时docker-compose build,一切都按预期工作,所有npm模块都/worker/node_modules按照我的预期安装.
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时docker-compose up,我看到了这个错误:
worker_1 …Run Code Online (Sandbox Code Playgroud) docker ×10
docker-compose ×10
boot2docker ×1
networking ×1
node.js ×1
postgresql ×1
ubuntu-14.04 ×1