什么是使用container_name的docker-compose.yml文件?我可以将它用作文件中hostname的服务名称吗docker-compose.yml?
此外,当我hostname在服务下明确写入时,它是否会覆盖由service name?
我正在尝试使用 nginzx、flask 和 react 创建 docker-compose 设置。我使用 react-create-app ( https://github.com/facebook/create-react-app )启动了我的 react 应用程序,但尚未对其进行任何更改。
我的反应应用程序的 Dockerfile 是:
FROM node:10
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
RUN npm install --verbose
# Bundle app source
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)
撰写脚本是:
version: '3.1'
services:
nginx:
image: nginx:1.15
container_name: nginx
volumes:
- ../:/var/www
- ./nginx-dev.conf:/etc/nginx/conf.d/default.conf
ports:
- 80:80
networks:
- my-network
depends_on:
- flask
- …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Docker compose在远程服务器上部署第二个数据库容器.这个postgresql服务器在端口5433上运行,而不是第一个postgresql容器使用的5432.
当我设置应用程序时,我收到此错误输出:
web_1 | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1 | Is the server running on host "db" (172.17.0.2) and accepting
web_1 | TCP/IP connections on port 5433?
Run Code Online (Sandbox Code Playgroud)
我的docker撰写文件是:
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: route_admin
POSTGRES_USER: route_admin
expose:
- "5433"
ports:
- "5433"
volumes:
- ./backups:/home/backups
web:
build: .
command: bash -c "sleep 5 && python -u application/manage.py runserver 0.0.0.0:8081"
volumes:
- .:/code
ports:
- "81:8081"
links:
- db
environment:
- PYTHONUNBUFFERED=0
Run Code Online (Sandbox Code Playgroud)
我觉得问题必须是服务器实例上的postgresql.conf文件,将端口设置为5432,导致我的应用程序尝试连接时出错.是否有一种简单的方法可以使用compose文件中的命令更改端口,而不是使用卷来替换文件?
我正在使用官方的postgresql容器来完成这项工作.
我有一个docker-compose-staging.yml文件,我用它来定义一个PHP应用程序.我已经定义了应用程序代码所在的数据卷容器(app),并使用volumes_from与其他容器共享.
泊坞窗 - 撰写-staging.yml:
version: '2'
services:
nginx:
build:
context: ./
dockerfile: docker/staging/nginx/Dockerfile
ports:
- 80:80
links:
- php
volumes_from:
- app
php:
build:
context: ./
dockerfile: docker/staging/php/Dockerfile
expose:
- 9000
volumes_from:
- app
app:
build:
context: ./
dockerfile: docker/staging/app/Dockerfile
volumes:
- /var/www/html
entrypoint: /bin/bash
Run Code Online (Sandbox Code Playgroud)
此特定的docker-compose-staging.yml用于将应用程序部署到云提供程序(DigitalOcean),而app容器的Dockerfile具有COPY命令,该命令将文件夹从本地目录复制到配置中定义的卷.
泊坞窗/分期/应用/ Dockerfile:
FROM php:7.1-fpm
COPY ./public /var/www/html/public
COPY ./code /var/www/html/code
Run Code Online (Sandbox Code Playgroud)
这在我第一次构建和部署应用程序时有效.我的公共和代码目录中的代码在远程服务器上存在且正确.我使用以下命令进行部署:
docker-compose -f docker-compose-staging.yml up -d
Run Code Online (Sandbox Code Playgroud)
但是,接下来我尝试将文件添加到我的本地公共目录,然后运行以下命令来重建更新的代码:
docker-compose -f docker-compose-staging.yml build app
Run Code Online (Sandbox Code Playgroud)
此重建的输出表明COPY命令成功:
Building app
Step 1 : FROM php:7.1-fpm
---> 6ed35665f88f
Step 2 …Run Code Online (Sandbox Code Playgroud) 我读到docker使用图层,因此在创建a container时Dockerfile,从基本图像开始,然后后续命令运行向容器添加图层,因此如果保存新容器的状态,则会有新图像.我想知道有几件事情.
如果我从Ubuntu图像开始,这是一个非常庞大和笨重的图像,因为它是一个完整的操作系统,然后我添加了一些工具并将其保存为我上传到集线器的新图像.如果有人下载我的图像,并且他们已经保存了Ubuntu图像images folder,这是否意味着他们可以跳过下载,Ubuntu因为他们已经有了图像?如果是这样,当我修改原始图像的某些部分时,这是如何工作的,Docker是否使用其缓存数据Ubuntu image在加载后有选择地将这些更改应用于它?
2.)如何通过修改Dockerfile来更新我构建的图像?我用这个设置了一个简单的django项目Dockerfile:
FROM python:3.5
ENV PYTHONBUFFERED 1
ENV APPLICATION_ROOT /app
ENV APP_ENVIRONMENT L
RUN mkdir -p $APPLICATION_ROOT
WORKDIR $APPLICATION_ROOT
ADD requirements.txt $APPLICATION_ROOT
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . $APPLICATION_ROOT
Run Code Online (Sandbox Code Playgroud)
并用它来开始创建图像.所以每当我创建一个盒子时,它会加载所有这些environment variables,如果我完全重建盒子,它会重新安装包和所有附加物.我需要添加一个新的环境变量,所以我将它添加到Dockerfile了测试变量的底部:
ENV COMPOSE_CONVERT_WINDOWS_PATHS 1
ENV TEST_ENV_VAR TEST
Run Code Online (Sandbox Code Playgroud)
当我删除容器和图像,并构建一个新的容器时,它似乎都相应,它告诉我它创建了新的第4步:ENV
COMPOSE_CONVERT_WINDOWS_PATHS 1
---> Running in 75551ea311b2
---> b25b60e29f18
Removing intermediate container 75551ea311b2
Run Code Online (Sandbox Code Playgroud)
所以它就像在某些中间容器转换中丢失了一些东西.这是缓存系统的工作原理,每个新层都是一个intermediate container …
我很喜欢使用docker-compose.
例如.在我的服务器上,当我想通过微小的更改来更新我的应用程序时,我只需要git pull origin master && docker-compose restart,完美地工作.
但有时,我需要重建(例如,我添加了一个npm依赖,需要npm install再次运行).
在这种情况下,我这样做docker-compose build --no-cache && docker-compose restart.
我希望这会:
但实际上它似乎又重新启动了前者.
这是预期的行为吗?
如何在构建之后处理重建并启动新的重建?
也许我错过了一个特定的命令?拥有它会有意义吗?
我有一个Dockerfile扩展FROM声明了一个的图像VOLUME.有没有办法以这种方式覆盖VOLUME指令,它"删除" VOLUME?
我有一个v3的撰写文件,其中有3个服务共享/使用相同的卷.在使用swarm模式时,我们需要创建额外的容器和卷来管理整个群集中的服务.
我打算使用NFS服务器,以便将单个NFS共享直接挂载到群集中的所有主机上.
我在下面找到了两种方法,但它需要在docker主机上执行额外的步骤 -
在主机上使用"fstab"或"mount"命令挂载NFS共享,然后将其用作docker服务的主机卷.
使用Netshare插件 - https://github.com/ContainX/docker-volume-netshare
有没有一种标准的方法,我可以使用docker compose v3直接使用/挂载NFS共享,只需执行少量/无步骤(我知道无论如何都需要"nfs-common"包)在docker主机上?
是否可以将 docker-compose 文件“导入”或链接到另一个 docker-compose 文件中?
假设我有两个文件:
# docker-compose-1.yml
services:
A:
# config
B:
# config
Run Code Online (Sandbox Code Playgroud)
# docker-compose-2.yml
services:
C:
# config
import: docker-compose-1.yml
Run Code Online (Sandbox Code Playgroud)
通过运行docker-compose -f docker-compose-2.yml up,我想启动容器 A、B(在导入的文件中指定)和 C。这可能-f吗,而不必将两个文件与参数链接起来?
我正在docker使用命令构建图像
docker-compose -f "docker-compose.yml" up -d --build
Run Code Online (Sandbox Code Playgroud)
但它返回一个错误
ERROR: 2 matches found based on name: network officeconverter_default is ambiguous
这有点清楚,在我的机器上有两个同名的网络试图存在。
问题是如何从 docker 网络中删除网络
PS E:\repos\Github\officeconverter> docker network ls 网络 ID 名称驱动程序范围 868c88a83bd6桥桥本地 92f7d20ed432 officeconverter_default 桥接本地 3f96cfb7b591 officeconverter_default 桥接本地