首页新闻找找看学习计划

请教1个Linxu下docker问题

0
[已解决问题] 解决于 2019-05-15 16:43

大家好。刚接触Linux和docker不久,弄了一天也没找到答案,故来博客园请求支援
问题一:docker容器怎么让他只能内网访问
问题描述:
我通过访问jexus。能访问到api,如果我直接输入ip:8802,也能访问到api。就绕过了jexus,那我的jexus还有什么存在的意义呀,我是想在外部只能通过jexus访问到我的api,而不能直接通过ip访问到我的api,所以我想现在api容器禁止被公网访问

问题二:dockerfile中命令
在Linux 我执行命令:sudo /usr/jexus/jws stop a 是成功的,我想这个命令封装到docker镜像中,可死活不成功

FROM debian:stretch

FROM mono/jexus //或者用这个
RUN apt-get update && apt-get -y install sudo
WORKDIR app
COPY . app
RUN cd app
RUN /usr/jexus/jws stop a

CMD ["sudo /usr/jexus/jws stop","a"] //或者这样

请会的指点下我。谢谢!

糯米粥的主页 糯米粥 | 初学一级 | 园豆:5
提问于:2019-05-14 22:19
< >
分享
最佳答案
0

docker-compose 配置文件中不对外映射端口就行了,与 Dockerfile 没有关系

奖励园豆:5
dudu | 高人七级 |园豆:41280 | 2019-05-14 22:25

api容器不映射端口吗?

糯米粥 | 园豆:5 (初学一级) | 2019-05-14 22:27

version: '3'

services:
db:
image: mysql
container_name: 'mysql'
command: --character-set-server=utf8 --collation-server=utf8_general_ci
restart: always
ports:
- '3306:3306'
environment:
MYSQL_USER: test
MYSQL_PASSWORD: 123456
MYSQL_PASSWORD_HOST: '%'
MYSQL_ROOT_PASSWORD: 123456
MYSQL_ROOT_HOST: '%'
volumes:
- /docker/mysq/my.cnf:/etc/my.cnf
- /docker/mysql/data:/var/lib/mysql
- /docker/mysql/sql:/docker-entrypoint-initdb.d
redis:
image: redis
container_name: 'redis'
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
ports:
- '6379:6379'
environment:
requirepass: 123456 #redis密码
appendonly: 'yes' #redis是否持久化
volumes:
- /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /docker/redis/data:/data #这里会保存持久化数据
jexus:
image: byniqing/jexus
container_name: 'jexus'
ports:
- '80:8803'#前一个80是暴露外部的,后一个8803是jexus监听的的。也就是配置文件中port=8803,此端口必须要开通
restart: always
volumes:
- /docker/jexus/www:/var/www
- /docker/jexus/siteconf:/usr/jexus/siteconf
- /docker/jexus/log:/usr/jexus/log
#depends_on:
#- web
web:
build: . #会执行当前目录下面的dockerfile文件
container_name: 'api' #容器名称
restart: always # web依赖于db,如果web比db启动快。就连接不上db导致web异常,web容器启动失败,restart可以不断重试,直到连接为止
volumes:
- /docker/myapi/appsettings.json:/app/appsettings.json
ports:
- '8802:80'#8802端口必须开启,如果是阿里云。添加入栈规则,jexus配置。代理到8802即可,浏览器直接访问这个port也能访问
#expose:
#- '8803'
depends_on: #依赖db容器,先启动的容器,但不会等待启动完成
- db
- redis

糯米粥 | 园豆:5 (初学一级) | 2019-05-14 22:28

我的docker-compose ,请问dudu是api节点下吗?

糯米粥 | 园豆:5 (初学一级) | 2019-05-14 22:29

@糯米粥: 去掉下面的配置

ports:
- '8802:80'
dudu | 园豆:41280 (高人七级) | 2019-05-14 22:31

@dudu: 这样jexus怎么映射到我的api呀?现在我的jexus是这样配置的
reproxy=/ ip:8802

糯米粥 | 园豆:5 (初学一级) | 2019-05-14 22:33

jexus 通过容器内部网络的 80 端口访问 web 容器

dudu | 园豆:41280 (高人七级) | 2019-05-14 22:33

@糯米粥: reproxy=/ web:80

dudu | 园豆:41280 (高人七级) | 2019-05-14 22:34

@糯米粥: 你用了 docker-compose ,却走容器外面绕了一圈

dudu | 园豆:41280 (高人七级) | 2019-05-14 22:35

@dudu: 嗯。经过你一说,清晰了。容器互连,刚试过成功了,谢谢dudu。第二个问题你能指教下我吗?

糯米粥 | 园豆:5 (初学一级) | 2019-05-14 22:50

@糯米粥: 你想在容器启动时运行 /usr/jexus/jws stop a

dudu | 园豆:41280 (高人七级) | 2019-05-15 07:50

@dudu: 对呀。我是想把这个命令封装到docker中,不知道我这个想法是不是太奇葩了

糯米粥 | 园豆:5 (初学一级) | 2019-05-15 09:33

@糯米粥: 不奇葩,这是很正常的需求。RUN 是在生成镜像时运行的命令,容器启动时运行的命令要用 ENTRYPOINT ,或者使用 docker compose 中的 command 配置

dudu | 园豆:41280 (高人七级) | 2019-05-15 10:26

@dudu: 嗯。好的。我在研究下。谢谢

糯米粥 | 园豆:5 (初学一级) | 2019-05-15 13:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册