标签: docker-compose

docker-compose 网络名称的最大长度是多少?

在我们的 jenkins2 管道中,我们使用 docker-compose 进行一些测试,我们的 docker-compose 文件从分支名称 (git) 及其内部版本号的组合中获取其网络名称。

詹金斯文件片段:

def version = "$BRANCH_NAME-$BUILD_NUMBER"
def networkName = "network-$version"
sh "NETWORK_NAME=$networkName docker-compose up -d"
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml 片段:

version: '3.5'
networks:
  default:
    name: ${NETWORK_NAME}
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

看起来当我们有一个短的分支名称时一切正常,而当我们有一个长的分支名称时它会失败。

docker-compose 中的网络名称可以保留多长时间?我似乎无法在文档中找到它。是否有比获取分支名称更好的解决方案来获得唯一的网络名称?

我试过这个,但不知何故似乎完全矫枉过正:

echo $(git rev-parse --abbrev-ref HEAD) | md5 | cut -f1 -d" "
Run Code Online (Sandbox Code Playgroud)

将给出 md5 结果。

jenkins docker docker-compose

1
推荐指数
1
解决办法
783
查看次数

如何在 docker-compose 中使用不同的端口运行多个 MongoDB?

我正在尝试在一个 docker-compose 中运行两个 MongoDB。由于我想在每个数据库中存储不同的数据,我需要通过不同的端口来区分它们。如果我运行以下 docker-compose,端口 27017 一切正常,但我无法访问端口 27018。在控制台中,两个服务的一切看起来都一样,只有端口 27018 上的服务缺少以下日志:

NETWORK [initandlisten] 等待端口 27017 上的连接(显示端口 27017)

当我尝试在浏览器中访问这两项服务时,端口 27017 上的一项有效,而 27018 上的一项无效。

如果有人能帮助我解决这个问题,我很高兴。很长一段时间以来一直在努力。谢谢!

这是我的代码:

version: "3"

services:
  mongo:
    image: mvertes/alpine-mongo:4.0.1-0
    volumes:
    - mongoDBvolume:/data/db
    ports:
    - "27017:27017"

   testmongo:
    image: mvertes/alpine-mongo:4.0.1-0
    command: mongod --port 27018
    volumes:
    - mongoDBvolume:/data/testdb
    ports:
    - "27018:27017"

volumes:
  mongoDBvolume:
    driver: local
Run Code Online (Sandbox Code Playgroud)

multiple-instances mongodb docker docker-compose

1
推荐指数
1
解决办法
1844
查看次数

Nginx 代理上游服务器 Docker Compose - 502 拒绝网关连接错误

我正在尝试使用 Docker Compose 容器化与我的 Web 应用程序相关的所有内容,包括 Nginx 和 SSL 证书。为此,我使用了来自 JWilderLetsEncrypt CompanionNginx 代理映像,但无法让 nginx 代理正常工作,结果最终是:

Nginx 502 错误网关

[错误] 31160#0:*35 connect() 失败(111:连接被拒绝),同时连接到上游,客户端:xx.xx.xx.xx,服务器:domain.com,请求:“GET /dev/HTTP/1.1 ", 上游: "webapp://127.0.0.1:8080", 主机: "domain.com"

这仅在尝试设置 Nginx 代理和 SSL 证书时发生,所以我知道这是这些容器中的一个或两个的配置问题。如果有人能发现我哪里出错了,我将不胜感激!

以下是有问题的容器:

version: '3.1'

networks:
  mywebapp:

services:
  nginx-proxy:
    container_name: nginx-proxy
    build: ./env/nginx-proxy
    networks:
      - mywebapp
    ports:
      - 80:80
      - 443:443
    env_file:
      - ./env/nginx-proxy/.env
    depends_on:
      - webapp
    tty: true
    volumes:
      - ./src:/home/www/mywebapp/src
      - ./storage:/home/www/storage/mywebapp
      - ./data/nginx-proxy/logs:/var/log/nginx
      - ./env/nginx-proxy/webserver/nginx.conf:/etc/nginx/nginx.conf
      - ./env/nginx-proxy/webserver/conf.d:/etc/nginx/conf.d
      - ./env/nginx-proxy/webserver/vhost.d:/etc/nginx/vhost.d
      - …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy nginx docker docker-compose jwilder-nginx-proxy

1
推荐指数
1
解决办法
7438
查看次数

在 docker-compose 网络中访问 postgres 数据

我在访问从 docker-compose 文件创建的数据库时遇到问题。

鉴于以下撰写文件,我应该能够使用以下内容从 java 连接到它:

jdbc:postgresql://eprase:eprase@database:7000/eprase
Run Code Online (Sandbox Code Playgroud)

但是,连接被拒绝。我什至不能使用 PGAdmin 使用相同的细节来连接它来创建新服务器。

我已经进入数据库容器并运行 psql 命令来验证是否已根据 postgres Docker 文档创建了 eprase 用户和数据库,一切似乎都很好。我不知道问题是在数据库容器内还是我需要在撰写网络中更改的内容。

客户端和服务器服务在很大程度上可以忽略,服务器是基于 Java 的 Web API,客户端是 Angular 应用程序。

编写文件:

version: "3"
services:
  client:
    image: eprase/client:latest
    build: ./client/eprase-app
    networks:
      api:
    ports:
      - "5000:80"
    tty: true
    depends_on:
      - server
  server:
    image: eprase/server:latest
    build: ./server
    networks:
      api:
    ports:
      - "6000:8080"
    depends_on:
      - database
  database:
    image: postgres:9
    volumes:
      - "./database/data:/var/lib/postgresql/data"
    environment:
      - "POSTGRES_USER=eprase"
      - "POSTGRES_PASSWORD=eprase"
      - "POSTGRES_DB=eprase"
    networks:
      api:
    ports:
      - "7000:5432"
    restart: unless-stopped
  pgadmin:
    image: dpage/pgadmin4:latest …
Run Code Online (Sandbox Code Playgroud)

postgresql docker docker-compose

1
推荐指数
1
解决办法
796
查看次数

Django 容器 - 提供静态文件

我正在尝试将使用 django-rest-framework 制作的 API 放入 docker 容器中。

除了我无法访问我的静态文件之外,一切似乎都有效。

这是我的settings.py

MEDIA_URL = '/uploads/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)

我的网址.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    path('api/bookmakers/', include('bookmakers.urls')),
    path('api/pronostics/', include('pronostics.urls')),
    path('api/', include('authentication.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile

FROM python:3.6

ENV PYTHONUNBUFFERED 1

RUN mkdir /code

WORKDIR /code

ADD requirements.txt /code/

RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
&& localedef -i fr_FR -c -f …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework docker docker-compose

1
推荐指数
1
解决办法
3916
查看次数

Docker 中的 Nuxt.js:缺少依赖项

我正在尝试在 Docker 中运行 Nuxt.js 应用程序。我已经像这样设置了我的 Dockerfile:

FROM node:10.15.1 as base
WORKDIR /usr/src/app
COPY package.json ./
ENV HOST 0.0.0.0

FROM base as development
RUN npm install
COPY . .
ENV NODE_ENV development
EXPOSE 3000
CMD [ "npm", "run", "dev" ]
Run Code Online (Sandbox Code Playgroud)

还有我的 docker-compose.yml:

version: "3.7"
services:
  frontend:
    container_name: frontend
    restart: unless-stopped
    build:
      context: .
      target: development
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - "3000:3000"
Run Code Online (Sandbox Code Playgroud)

当我跑步时,docker-compose up我得到

frontend    | These dependencies were not found:                    friendly-errors 10:52:33
frontend    |                                                       friendly-errors 10:52:33
frontend …
Run Code Online (Sandbox Code Playgroud)

node.js docker docker-compose nuxt.js

1
推荐指数
1
解决办法
2054
查看次数

Golang Docker 容器未在 Docker-Compose 中重新启动

我希望能够在无法连接到 rabbitmq 时重新启动 golang docker 文件,如下所述:(Docker Compose 在启动 Y 之前等待容器 X,请参阅:svenhornberg 的回答)。不幸的是,我的 golang 容器将退出但永远不会重新启动,我不知道为什么。

Docker-撰写:

version: '3.3'
services:
  mongo:
    image: 'mongo:3.4.1'
    container_name: 'datastore'
    ports:
      - '27017:27017'
  rabbitmq:
    restart: always
    tty: true
    image: rabbitmq:3.7-management-alpine
    hostname: "rabbit"
    ports:
      - "15672:15672" 
      - "5672:5672"
    labels:
      NAME: "rabbitmq"
    volumes:
      - ./rabbitmq-isolated.conf:/etc/rabbitmq/rabbitmq.config
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:15672"]
      interval: 3s
      timeout: 5s
      retries: 20
  api:
    restart: always
    tty: true
    container_name: 'api'
    build: '.'
    working_dir: /go/src/github.com/patientplatypus/project
    ports:
      - '8000:8000'
    volumes:
      - './:/go/src/github.com/patientplatypus/project'
      - './uploads:/uploads'
      - …
Run Code Online (Sandbox Code Playgroud)

restart go rabbitmq docker docker-compose

1
推荐指数
1
解决办法
1041
查看次数

在 docker-compose.yml 卷中声明为部分和在服务下有什么区别?

在声明中声明有什么区别 docker-compose.yml文件中卷部分与仅在服务下使用卷关键字有?

例如,我以这种方式为容器映射一个卷:

services:
   mysqldb:
      volumes:
         - ./data:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)

这将从我的工作目录映射到名为 data 的文件夹。

但我也可以通过声明一个卷部分来映射一个卷,并为容器使用它的别名:

services:
   mysqldb:
      volumes:
         - data_volume:/var/lib/mysql
volumes:
   data_volume:
      driver: local
Run Code Online (Sandbox Code Playgroud)

在这种方法中,存储映射文件的实际位置似乎在某种程度上由 docker compose 管理。

这两种方法有什么区别或者它们是一样的吗?我应该真正使用哪一种?

使用一种方法比另一种方法有什么好处吗?

docker docker-compose docker-volume

1
推荐指数
1
解决办法
1040
查看次数

docker compose:postgresql 创建数据库,用户通行证并授予权限

我有以下 docker-compose 文件:

version: '3'
services:
  web:
    build:
      context: ./django_httpd_mod_wsgi
    ports:
     - "8000:80"
  db:
    build:
      context: ./postgresql
    volumes:
       - db-data:/var/lib/postgres/data
volumes:
  db-data:
Run Code Online (Sandbox Code Playgroud)

我正在使用 archlinux 构建 psotgresql 映像:

以下是我的 postgresql Dockerfile:

FROM archlinux/base

RUN yes | pacman -S postgresql

RUN mkdir /run/postgresql/
RUN chown -R postgres:postgres /run/postgresql/

USER postgres

RUN initdb -D /var/lib/postgres/data

RUN psql -c 'CREATE DATABASE btgapp;' 
RUN psql -c "CREATE USER simha WITH PASSWORD 'krishna';" 
RUN psql -c 'GRANT ALL PRIVILEGES ON DATABASE btgapp TO simha;'

CMD ["/usr/bin/postgres","-D","/var/lib/postgres/data"] …
Run Code Online (Sandbox Code Playgroud)

postgresql archlinux docker docker-compose

1
推荐指数
1
解决办法
5100
查看次数

错误:对于 redis 无法为服务 redis 创建容器:源不是目录

任何人都可以帮忙吗?

每次我尝试启动 redis 所以我连接我正在编写的应用程序时都会出现错误

错误:对于 redis 无法为服务 redis 创建容器:源不是目录

我像这样创建了一个简单的 dockerfile

FROM redis:5-alpine
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
Run Code Online (Sandbox Code Playgroud)

和我的撰写文件

version: "3"

services:
  redis:
    container_name: "redis"
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "6379:6379"

    volumes:
      - redis-data:/usr/local/etc/redis/redis.conf

    networks:
      - internal

    restart: unless-stopped

volumes:
  redis-data:

networks:
  internal:
    external: false
Run Code Online (Sandbox Code Playgroud)

我尝试删除 dockerfile 中的 COPY 命令并构建了容器。还尝试删除撰写文件中的卷,它还构建了容器。

所以它与此有关,但我看不到它。

有人可以帮忙吗?

我知道我做了一些愚蠢的事情。

文件都在同一个目录下

在此处输入图片说明

docker dockerfile docker-compose

1
推荐指数
1
解决办法
4375
查看次数