我正在尝试使用Nginx-Proxy在 Ubuntu VPS 上的 docker 容器内运行 WordPress 网站。
我创建了以下docker-compose.yml文件
version: '3.4'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- 80:80
- 443:443
restart: always
networks:
- nginx-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /etc/nginx/vhost.d:/etc/nginx/vhost.d:ro
- /etc/certificates:/etc/nginx/certs
wordpress:
image: wordpress
container_name: wordpress
restart: always
ports:
- 8080:80
environment:
- VIRTUAL_HOST=wordpress.domain.com
- VIRTUAL_PORT=5500
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=db_username
- WORDPRESS_DB_PASSWORD=db_password
- WORDPRESS_DB_NAME=db_name
depends_on:
- nginx-proxy
- db
networks:
- nginx-proxy
volumes:
- wordpress:/var/www/html
ports:
- 5500:5500
expose:
- 5500
db:
image: mysql:latest …Run Code Online (Sandbox Code Playgroud) nginx docker docker-compose docker-container jwilder-nginx-proxy
据我了解,
Dockerfile就像是创建镜像的config/recipe,而docker-compose用于轻松创建多个可能有关系的容器,避免通过docker命令重复创建容器。
有两个文件。
Dockerfile
FROM node:lts-alpine
WORKDIR /server
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3030
CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '2.1'
services:
test-db:
image: mysql:5.7
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=true
- MYSQL_USER=admin
- MYSQL_PASSWORD=12345
- MYSQL_DATABASE=test-db
volumes:
- ./db-data:/var/lib/mysql
ports:
- 3306:3306
test-web:
environment:
- NODE_ENV=local
#- DEBUG=*
- PORT=3030
image: node:lts-alpine
build: ./
command: >
npm run dev
volumes:
- ./:/server
ports:
- "3030:3030"
depends_on:
- test-db
Run Code Online (Sandbox Code Playgroud)
问题 1
当我运行 docker-compose up --build 时
A。镜像将基于 Dockerfile …
当我尝试使用 docker 上下文从远程服务器上的本地计算机运行此命令时,我遇到了 docker-compose 问题:
docker-compose --context remote up -d
Run Code Online (Sandbox Code Playgroud)
我明白了:
ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused
Run Code Online (Sandbox Code Playgroud)
我仅使用此命令收到此错误,其他一切正常(如 ps 或 log 命令)。另外,常规 ssh 连接工作正常,所以我不认为我的 ssh 配置有问题。
据我所知,以详细方式运行命令不会提供任何有用的信息。
我有以下 dockerfile:
FROM jenkins/jenkins:lts-alpine
USER root
RUN apk update
RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib wget
RUN apk add libgdiplus --repository https://dl-3.alpinelinux.org/alpine/edge/testing/
USER jenkins
RUN wget https://dot.net/v1/dotnet-install.sh -O $HOME/dotnet-install.sh
RUN chmod +x $HOME/dotnet-install.sh
RUN $HOME/dotnet-install.sh -c 5.0
RUN dotnet --info
EXPOSE 2376 23676
Run Code Online (Sandbox Code Playgroud)
但是当我运行 docker-compose 时,它给了我:
Building jenkins
failed to get console mode for stdout: Invalid identifier.
[+] Building 64.6s (10/11)
[+] Building 64.7s (11/11) FINISHED
=> [internal] load build definition from jenkins.dockerfile 0.0s
=> …Run Code Online (Sandbox Code Playgroud) 我在 docker-compose.yml 中定义了两项服务,每一项都使用自己的命名卷。
这些卷不是预先创建的。我希望 docker 在容器首次启动后创建卷,并在以后的启动中重复使用相同的卷。
docker-compose.yml
version: '2'
services:
db:
container_name: db
environment:
POSTGRES_DB=new_db_name
volumes:
- pgdata:/var/lib/postgresql/data
app:
container_name: app
depends_on:
- db
volumes:
- appdata:/app/data
volumes:
pgdata
appdata
Run Code Online (Sandbox Code Playgroud)
但是,执行 docker-compose up 命令后,docker 会将当前目录名称添加到卷中。
我希望 docker 将 docker-compose yml 中指定的确切名称分配给卷。
我在这里找到了一个解决方案:https ://stackoverflow.com/a/59066462/12496407
但是,我无法应用上述解决方案,因为我的 docker-compose.yml 中有多个卷,并且提到的解决方案仅考虑一个卷。
我正在尝试部署具有单个复制服务的三个主机节点的 Docker Swarm,并在其前面放置一个 HAProxy。我希望客户端能够通过 SSL 进行连接。
我的docker-compose.yml:
version: '3.9'
services:
proxy:
image: haproxy
ports:
- 443:8080
volumes:
- haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
deploy:
placement:
constraints: [node.role == manager]
networks:
- servers-network
node-server:
image: glusk/hackathon-2021:latest
ports:
- 8080:8080
command: npm run server
deploy:
mode: replicated
replicas: 2
networks:
- servers-network
networks:
servers-network:
driver: overlay
Run Code Online (Sandbox Code Playgroud)
我的haproxy.cfg(基于官方示例):
# Simple configuration for an HTTP proxy listening on port 80 on all
# interfaces and forwarding requests to a single backend "servers" …Run Code Online (Sandbox Code Playgroud) 我在 docker-compose 中安装 Elasticsearch 卷时遇到问题。安装用于另一个磁盘,安装在:/mt/sda/我正在使用以下 docker-compose.yml:
version: "3.0"
services:
elasticsearch:
container_name: elastic-container-rescue
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.0
volumes:
- es-data:/mt/sda/es-data
environment:
- xpack.security.enabled=true
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- "network.host:0.0.0.0"
- ELASTIC_PASSWORD=$ES_PASS
ports:
- 9300:9200
networks:
- elastic
networks:
elastic:
driver: bridge
volumes:
es-data:
driver: local
Run Code Online (Sandbox Code Playgroud)
当我用 检查它时docker volume inspect,它仍然显示不正确的安装点- 它应该是:/mt/sda/es-data
{
"CreatedAt": "2021-11-09T13:51:05+01:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "rescue-es",
"com.docker.compose.version": "1.25.5",
"com.docker.compose.volume": "es-data"
},
"Mountpoint": "/var/lib/docker/volumes/rescue-es_es-data/_data",
"Name": "rescue-es_es-data",
"Options": null,
"Scope": "local"
}
Run Code Online (Sandbox Code Playgroud)
关于如何分配正确的安装点有什么建议吗?
elasticsearch docker-compose docker-volume persistent-volumes
我正在尝试在 docker 上设置一主一从和一哨兵,为此我编写了这个 docker compose 文件。
version: '3'
services:
redis-master:
container_name: "redis-master"
image: redis
ports:
- "6379:6379"
command: "redis-server /etc/redis.conf"
volumes:
- "./data/master:/data/"
- "./master.conf:/etc/redis.conf"
redis-slave:
container_name: "redis-slave"
image: redis
ports:
- "6380:6379"
command: "redis-server /etc/redis.conf"
volumes:
- "./data/slave:/data/"
- "./slave.conf:/etc/redis.conf"
depends_on:
- redis-master
redis-sentinel:
container_name: 'redis-sentinel'
image: redis
ports:
- "26379:26379"
command: >
bash -c "chmod 777 /etc/sentinel.conf
&& redis-server /etc/sentinel.conf --sentinel"
volumes:
- "./sentinel.conf:/etc/sentinel.conf"
depends_on:
- redis-master
- redis-slave
Run Code Online (Sandbox Code Playgroud)
sudo docker-compose up --build --force但是,当我尝试使用除 redis-sentinel 之外的所有服务构建它时,所有服务都运行良好。我在日志中收到此错误
redis-sentinel …Run Code Online (Sandbox Code Playgroud) 我有一些 docker 容器,可以使用 docker-compose up / down 启动和停止。在 docker-compose.yml 中,我为每个容器定义了一个卷。据我了解,这些应该显示为 var/lib/docker/volumes 下的命名卷,但我所看到的只是一堆神秘的目录,每次重新启动容器时它们的数量也会增加。
每次我重新启动容器时,当我认为我正在使用卷来避免出现这样的情况时,数据库再次为空。我想保留数据。
我做错了什么吗?
version: "3"
services:
nftapi:
env_file:
- .env
build:
context: .
ports:
- '5000:5000'
depends_on:
- postgres
networks:
- postgres
postgres:
container_name: postgres
image: postgres:latest
ports:
- "5432:5432"
volumes:
- /data/postgres:/data/postgres
env_file:
- docker.env
networks:
- postgres
pgadmin:
links:
- postgres:postgres
container_name: pgadmin
image: dpage/pgadmin4
ports:
- "8080:80"
volumes:
- /data/pgadmin:/root/.pgadmin
env_file:
- docker.env
networks:
- postgres
networks:
postgres:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
卷目录屏幕
docker-compose ×10
docker ×9
.net-core ×1
docker-swarm ×1
dockerfile ×1
haproxy ×1
jenkins ×1
nginx ×1
postgresql ×1
redis ×1
sql ×1
ssh ×1