我刚在工作中换了一台新电脑,我不明白为什么会出现这个问题。我已经搜索了很多 SO 线程和其他网站,但还没有解决这个问题。
我的操作系统是 Fedora 29。而且我对 docker 很菜鸟,所以我真的迷失在这一切中。
所以基本上每次我运行时docker-compose up,我都会收到此错误:
nginx-proxy | dockergen.1 | 2019/10/15 08:23:40 Error retrieving docker server version info: Get http://unix.sock/version: dial unix /tmp/docker.sock: connect: permission denied
nginx-proxy | dockergen.1 | 2019/10/15 08:23:40 Error retrieving docker server info: Get http://unix.sock/info: dial unix /tmp/docker.sock: connect: permission denied
nginx-proxy | dockergen.1 | 2019/10/15 08:23:40 Error listing containers: Get http://unix.sock/containers/json?all=1: dial unix /tmp/docker.sock: connect: permission denied
nginx-proxy | dockergen.1 | 2019/10/15 08:23:40 Watching docker events
nginx-proxy | dockergen.1 …Run Code Online (Sandbox Code Playgroud) 我想将我的服务器部署到 AWS EC2 实例。当我在 ssh 控制台中输入“sudo docker-compose up”时,出现以下错误:
错误:对于 nginx 无法启动服务 nginx:OCI 运行时创建失败:container_linux.go:345: 启动容器进程导致“process_linux.go:430: 容器初始化导致 \"rootfs_linux.go:58: 挂载 \\"/home/ubuntu /site/nginx/default.conf\\“到rootfs \\”/var/lib/docker/overlay2/b24f64910c6ab7727a4cb08afac0d034bb759baa4bfd605466ca760359f411c2/merged\\“在\\”/var/lib/docker/overlay2/b24f64910c6ab7727a4 cb08afac0d034bb759baa4bfd605466ca760359f411c2/合并/etc/ nginx/conf.d/default.conf\\" 导致 \\"不是目录\\"\"": 未知:您是否尝试将目录挂载到文件上(或反之亦然)?检查指定的主机路径是否存在并且是预期的类型
这是我的 docker-compose.yml 文件:
version: '2'
networks:
SRVR:
services:
nginx:
image: nginx:stable-alpine
container_name: SRVR_nginx
ports:
- "8080:80"
volumes:
- ./code:/code
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/logs:/var/log/nginx
depends_on:
- php
networks:
- SRVR
php:
build: ./php
container_name: SRVR_php
volumes:
- ./code:/code
ports:
- "9000:9000"
networks:
- SRVR
Run Code Online (Sandbox Code Playgroud)
相同的 docker-compose.yml 在运行 Ubuntu 操作系统的本地计算机上运行良好。EC2 实例还运行 Ubuntu 操作系统。
我目前正在尝试在 docker compose 中设置 SQL Server,并且想使用指令在构建时创建数据库RUN。这不起作用,但是当我使用 sh 在正在运行的容器上执行相同的命令时,它起作用
我的撰写文件如下所示:
version: "3.7"
services:
mssql:
build: ./mssql
environment:
SA_PASSWORD: "Password12345!"
ACCEPT_EULA: "Y"
container_name: mssqlDB
ports:
- "1433:1433"
restart: always
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile:
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
COPY ./prod.sql /
RUN ./opt/mssql-bin/sqlcmd -S localhost -U SA -P "Password12345!" -Q "Create Database HelloWorld"
CMD ["/opt/mssql/bin/sqlservr"]
Run Code Online (Sandbox Code Playgroud) 我有几个数据库进程在 Docker 容器中运行。在某些情况下,我想限制容器使用的内存和存储。我知道 docker-compose 可以让您限制资源使用,但我希望尽可能保持容器运行。
我在尝试访问我的 PHP 容器(正在连接到 MariaDB 容器)时遇到 mysql 连接问题
mysqli_connect(): php_network_getaddresses: getaddrinfo 失败: 第16行 /var/www/html/config.php中的名称或服务未知
看来 PHP 容器不知道我的 MariaDB 容器。怎么看配置好像都还不错。如果我公开我的数据库容器,我就可以在本地连接到它。
docker-compose.yaml
version: "3"
networks:
api_server:
services:
db:
image: mariadb
restart: always
volumes:
- ./mariadb_data:/var/lib/mysql
- ./database_dump/dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
MYSQL_PASSWORD: pass
MYSQL_DATABASE: somedb
php-server:
image: php.core.image
networks:
- api_server
build:
context: ./php
dockerfile: Dockerfile
depends_on:
- db
environment:
ENV_NAME: dev
ports:
- 80:80
Run Code Online (Sandbox Code Playgroud)
PHP 的 Dockerfile
FROM php:7.2-apache
RUN docker-php-ext-install -j$(nproc) mysqli
COPY . /var/www/html/
Run Code Online (Sandbox Code Playgroud)
我在 php 中的连接如下所示: …
我有两个服务,位于两个不同的 GitLab 存储库,部署到同一主机。我目前正在使用supervisord来运行所有服务。每个存储库的 CI/CD 将代码推送到主机。
supervisord我正在尝试用 Docker替换。我所做的如下:
Dockerfile为每个服务设置一个。docker-compose.yml,该存储docker-compose up库在其 CI 中运行以构建和运行这两个服务。我希望这个存储库只部署一次。我正在寻找一种docker-compose在部署这两项服务之一时自动更新的方法。
编辑:本质上,我试图找出使用docker-compose多存储库设置和一台主机的最佳方法。
我的docker-compose:
version: "3.4"
services:
redis:
image: "redis:alpine"
api:
build: .
command: gunicorn -c gunicorn_conf.py --bind 0.0.0.0:5000 --chdir server "app:app" --timeout 120
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- redis
celery-worker:
build: .
command: celery worker -A server.celery_config:celery
volumes:
- .:/app
depends_on:
- redis
celery-beat:
build: .
command: celery beat …Run Code Online (Sandbox Code Playgroud) python continuous-integration docker microservices docker-compose
我仔细研究了非常类似的 stackoverflow 问题,并将我的代码更改为现在的样子。我仍然收到cannot resolve broker hostname错误。如果我只是使用amqp:user:mypass@locahost:5672我会得到connection refused
# docker-compoose.yml
version: "3.8"
services:
broker:
image: rabbitmq:3-management-alpine
hostname: rabbit1
environment: &env
RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
RABBITMQ_DEFAULT_USER: "user"
RABBITMQ_DEFAULT_PASS: "password"
RABBITMQ_DEFAULT_VHOST: "/"
CELERY_BROKER_URL: "amqp://user:password@rabbit1:5672"
ports:
- "5672:5672"
- "15672:15672"
expose:
- "5672"
networks:
- webnet
volumes:
- .:/home/user
worker:
build:
context: .
dockerfile: ./worker/Dockerfile
command: ["celery", "worker", "--app=worker.tasks.app", "--loglevel=INFO"]
environment:
<<: *env
links:
- broker
depends_on:
- broker
networks:
- webnet
volumes:
- .:/home/user
networks:
webnet:
Run Code Online (Sandbox Code Playgroud)
# Dockerfile
FROM python:3.7-slim …Run Code Online (Sandbox Code Playgroud) 我正在对 PHP 应用程序进行容器化,并希望根据环境变量修改 Apache 配置。这是在覆盖默认值的脚本中完成的ENTRYPOINT:
FROM php:7.2-apache
# ...
COPY prepare-docker-configs.sh .
RUN chmod +x prepare-docker-configs.sh
ENTRYPOINT ./prepare-docker-configs.sh
Run Code Online (Sandbox Code Playgroud)
进行这些修改后,Apache 不会启动。apache2-foreground似乎缺少命令,所以我在末尾运行它prepare-docker-configs.sh
#!/bin/bash
# ... Some config substitution
apache2-foreground
Run Code Online (Sandbox Code Playgroud)
现在 Apache 已经启动,一切都按预期进行。但我注意到停止容器比以前慢得多。我跑time docker-compose down了两个星座:
ENTRYPOINTreal 0m2,080s
user 0m0,449s
sys 0m0,064
Run Code Online (Sandbox Code Playgroud)
ENTRYPOINTreal 0m12,247s
user 0m0,491s
sys 0m0,067s
Run Code Online (Sandbox Code Playgroud)
所以需要大约10秒的时间。特别是在需要进行大量测试的开发过程中,这总共会浪费大量时间。
ENTRYPOINT停止速度如此之慢?如何解决?我尝试STOPSIGNAL SIGWINCH从原始 Dockerfile 添加并运行docker-php-entrypoint,两者都没有帮助。
该docker-compose.yml文件没什么特别的。由于内部冲突,它只是定义了服务并覆盖默认网络:
version: '2'
services:
app:
build:
context: .
args: …Run Code Online (Sandbox Code Playgroud) 我有两组服务(容器组)在两台不同的机器上运行。两组服务都是使用 docker-compose 文件声明的。目前,在每个 docker-compose 文件中,我都包含一个桥接网络。这两组服务通过明确提及每台机器的 IP 地址来相互通信。
如果我让这两个 Docker 服务集通过覆盖网络相互通信,而不是像我现在那样通过硬编码 IP 地址来让每个服务集相互通信,这会减少网络延迟吗?换句话说,会提高这两个服务之间的通信性能吗?
如果上一个问题的答案是肯定的,那么我可以在不使用 docker swarm 的情况下在这两台机器之间定义一个覆盖网络吗?另外,我可以在 docker-compose 文件中声明这个 docker-swarm 网络吗?
如果您有 .yaml 配置文件或命令行代码片段可以完成我想要的操作,我们将不胜感激。
在 Docker 中运行 Redis
文件docker-compose.yml
version: "3.8"
services:
redis:
image: redis
volumes:
- ./data:/data
ports:
- 6379:6379
Run Code Online (Sandbox Code Playgroud)
docker pull redis
docker-compose up
docker-compose up -d
docker container ls
telnet localhost 6379
Run Code Online (Sandbox Code Playgroud)
如何连接到Redis服务器redis-cli?
docker ×10
docker-compose ×10
dockerfile ×2
apache2 ×1
celery ×1
docker-swarm ×1
fedora ×1
nginx ×1
performance ×1
python ×1
python-3.x ×1
rabbitmq ×1
redis ×1
redis-cli ×1
sql-server ×1